af360 0.1.14 → 0.1.15
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/dist/.next/BUILD_ID +1 -1
- package/dist/.next/app-build-manifest.json +131 -133
- package/dist/.next/app-path-routes-manifest.json +21 -21
- package/dist/.next/build-manifest.json +5 -5
- package/dist/.next/prerender-manifest.json +43 -43
- package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found.html +1 -1
- package/dist/.next/server/app/_not-found.rsc +3 -3
- package/dist/.next/server/app/ahead/page.js +1 -1
- package/dist/.next/server/app/ahead/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/ahead.html +1 -1
- package/dist/.next/server/app/ahead.rsc +4 -4
- package/dist/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/card/route.js +1 -1
- package/dist/.next/server/app/api/card/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/card/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/check/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/connectors/github/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/consent/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/context/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/discover/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/expiry/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/first-light/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/handoff/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/health/route.js +1 -1
- package/dist/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/incidents/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/insights/route.js +1 -1
- package/dist/.next/server/app/api/insights/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/insights/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/log/route.js +1 -1
- package/dist/.next/server/app/api/log/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/pulse/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/radar/route.js +1 -1
- package/dist/.next/server/app/api/radar/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/report/route.js +1 -1
- package/dist/.next/server/app/api/report/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/report/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/services/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/status/route.js +1 -1
- package/dist/.next/server/app/api/status/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/status/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/connections/page.js +2 -2
- package/dist/.next/server/app/connections/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/connections.html +1 -1
- package/dist/.next/server/app/connections.rsc +4 -4
- package/dist/.next/server/app/dashboard/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/dashboard.html +1 -1
- package/dist/.next/server/app/dashboard.rsc +3 -3
- package/dist/.next/server/app/discoveries/page.js +1 -1
- package/dist/.next/server/app/discoveries/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/discoveries.html +1 -1
- package/dist/.next/server/app/discoveries.rsc +4 -4
- package/dist/.next/server/app/expiry/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/expiry.html +1 -1
- package/dist/.next/server/app/expiry.rsc +3 -3
- package/dist/.next/server/app/fleet/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/fleet.html +1 -1
- package/dist/.next/server/app/fleet.rsc +3 -3
- package/dist/.next/server/app/home/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/home.html +1 -1
- package/dist/.next/server/app/home.rsc +3 -3
- package/dist/.next/server/app/legal/privacy/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/legal/terms/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/log/page.js +1 -1
- package/dist/.next/server/app/log/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/log.html +1 -1
- package/dist/.next/server/app/log.rsc +4 -4
- package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/projects/page.js +1 -1
- package/dist/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/projects.html +1 -1
- package/dist/.next/server/app/projects.rsc +4 -4
- package/dist/.next/server/app/radar/page.js +1 -64
- package/dist/.next/server/app/radar/page.js.nft.json +1 -1
- package/dist/.next/server/app/radar/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/radar.html +1 -1
- package/dist/.next/server/app/radar.rsc +4 -4
- package/dist/.next/server/app/report/page.js +2 -2
- package/dist/.next/server/app/report/page.js.nft.json +1 -1
- package/dist/.next/server/app/report/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/report.html +1 -1
- package/dist/.next/server/app/report.rsc +4 -4
- package/dist/.next/server/app/settings/page.js +1 -1
- package/dist/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/settings.html +1 -1
- package/dist/.next/server/app/settings.rsc +4 -4
- package/dist/.next/server/app/sites/page.js +1 -1
- package/dist/.next/server/app/sites/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/sites.html +1 -1
- package/dist/.next/server/app/sites.rsc +4 -4
- package/dist/.next/server/app/welcome/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/welcome.html +1 -1
- package/dist/.next/server/app/welcome.rsc +4 -4
- package/dist/.next/server/app-paths-manifest.json +21 -21
- package/dist/.next/server/chunks/2346.js +1 -1
- package/dist/.next/server/chunks/2465.js +64 -1
- package/dist/.next/server/chunks/2817.js +1 -1
- package/dist/.next/server/chunks/4825.js +1 -0
- package/dist/.next/server/chunks/572.js +1 -1
- package/dist/.next/server/chunks/6992.js +1 -1
- package/dist/.next/server/chunks/7511.js +1 -1
- package/dist/.next/server/chunks/7719.js +1 -1
- package/dist/.next/server/chunks/8134.js +1 -1
- package/dist/.next/server/chunks/876.js +1 -1
- package/dist/.next/server/chunks/9170.js +1 -1
- package/dist/.next/server/middleware-build-manifest.js +1 -1
- package/dist/.next/server/middleware-manifest.json +1 -1
- package/dist/.next/server/pages/404.html +1 -1
- package/dist/.next/server/pages/500.html +1 -1
- package/dist/.next/static/chunks/{1255-612df69cb02f2021.js → 1255-fc6c00ab2f765339.js} +1 -1
- package/dist/.next/static/chunks/3192-40ade9877c89ec45.js +1 -0
- package/dist/.next/static/chunks/5623-53fb7cea5de0afef.js +1 -0
- package/dist/.next/static/chunks/7897-b9c15e8805df61ef.js +1 -0
- package/dist/.next/static/chunks/8050-a75457e83cd8be0f.js +1 -0
- package/dist/.next/static/chunks/app/ahead/page-75602559f92be6c4.js +1 -0
- package/dist/.next/static/chunks/app/connections/page-ff9d0b4e4fcf5ebe.js +1 -0
- package/dist/.next/static/chunks/app/discoveries/{page-52696e6ee0c8d3d5.js → page-6b06c0c2a94f3b94.js} +1 -1
- package/dist/.next/static/chunks/app/{error-37987420de14c10c.js → error-c67c297ef2dd70de.js} +1 -1
- package/dist/.next/static/chunks/app/log/page-842048c36f071dd6.js +1 -0
- package/dist/.next/static/chunks/app/projects/{page-75a41d4a90675d93.js → page-1d6b330842a2ff80.js} +1 -1
- package/dist/.next/static/chunks/app/radar/page-584b42327baac21b.js +1 -0
- package/dist/.next/static/chunks/app/report/page-9dc52d7f76569e42.js +1 -0
- package/dist/.next/static/chunks/app/settings/{page-a38c457b7c57567b.js → page-582279bf3fe509d4.js} +1 -1
- package/dist/.next/static/chunks/app/sites/page-3dcc5a0990fae677.js +1 -0
- package/dist/.next/static/chunks/{main-6828c74376f2b965.js → main-574ae5bf2f2165c4.js} +1 -1
- package/dist/.next/static/css/fbb4cf81dde34731.css +1 -0
- package/dist/build-id.json +140 -142
- package/dist/node_modules/@next/env/package.json +1 -1
- package/dist/node_modules/next/dist/build/swc/index.js +1 -1
- package/dist/node_modules/next/dist/build/webpack-config.js +2 -2
- package/dist/node_modules/next/dist/compiled/next-server/app-page-experimental.runtime.prod.js +2 -2
- package/dist/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +2 -2
- package/dist/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +2 -2
- package/dist/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js +2 -2
- package/dist/node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js +1 -1
- package/dist/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +7 -7
- package/dist/node_modules/next/dist/compiled/next-server/pages.runtime.prod.js +2 -2
- package/dist/node_modules/next/dist/lib/has-necessary-dependencies.js +2 -0
- package/dist/node_modules/next/dist/lib/verify-typescript-setup.js +19 -0
- package/dist/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/node_modules/next/dist/server/image-optimizer.js +22 -2
- package/dist/node_modules/next/dist/server/lib/app-info-log.js +1 -1
- package/dist/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +17 -4
- package/dist/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/dist/node_modules/next/dist/shared/lib/canary-only.js +1 -1
- package/dist/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js +1 -1
- package/dist/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/dist/node_modules/next/package.json +11 -11
- package/dist/package.json +2 -2
- package/dist/shell/bin/af360-bridge.exe +0 -0
- package/package.json +2 -2
- package/shell/bin/af360-bridge.exe +0 -0
- package/dist/.next/server/chunks/1155.js +0 -1
- package/dist/.next/server/chunks/6584.js +0 -1
- package/dist/.next/static/chunks/1681-b233404f9ec2fc2e.js +0 -1
- package/dist/.next/static/chunks/2036-e29441d605c493a4.js +0 -1
- package/dist/.next/static/chunks/3192-6b341d547a49fa85.js +0 -1
- package/dist/.next/static/chunks/5623-ec4f1a6f7695d8d1.js +0 -1
- package/dist/.next/static/chunks/7897-6e6c509aea495560.js +0 -1
- package/dist/.next/static/chunks/app/ahead/page-e72bed448dd40bd5.js +0 -1
- package/dist/.next/static/chunks/app/connections/page-5d6cae02e6f2b49a.js +0 -1
- package/dist/.next/static/chunks/app/log/page-45b4cfd8f1a29d09.js +0 -1
- package/dist/.next/static/chunks/app/radar/page-4b4aad549dffcd3a.js +0 -1
- package/dist/.next/static/chunks/app/report/page-145496e8f0d5bc86.js +0 -1
- package/dist/.next/static/chunks/app/sites/page-96a7dcf3c1e9aa19.js +0 -1
- package/dist/.next/static/css/94d302c686de7e23.css +0 -1
- /package/dist/.next/static/{0b943e6aa8d5ffe860588 → 4602553707d90d0fadeba}/_buildManifest.js +0 -0
- /package/dist/.next/static/{0b943e6aa8d5ffe860588 → 4602553707d90d0fadeba}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8050],{23:(e,t,n)=>{function a(e,t){let n=null,a=-1/0;for(let t of e){if(!t.lastActivity)continue;let e=new Date(t.lastActivity).getTime();Number.isFinite(e)&&e>a&&(a=e,n=t)}return n?{project:n,lastTs:a,stale:t-a>6048e5}:null}function s(e){return e?o(e).filter(e=>!e.handled&&e.losable):[]}function i(e){return"unsaved"===e.losable?0:e.losable?1:"expiry"===e.kind?e.entrusted&&!e.cost?1:2:"site"===e.kind?2:3}function r(e){let t=i(e);return t<=1?"losable":2===t?"money":"hygiene"}function o(e){return e?e.items.map((e,t)=>({it:e,i:t})).sort((e,t)=>{var n,a;return Number(!!e.it.handled)-Number(!!t.it.handled)||i(e.it)-i(t.it)||Number("red"===t.it.tone)-Number("red"===e.it.tone)||(null!=(n=e.it.since)?n:1/0)-(null!=(a=t.it.since)?a:1/0)||e.i-t.i}).map(e=>e.it):[]}n.d(t,{HU:()=>s,bI:()=>o,pd:()=>r,sp:()=>a}),n(5163)},639:(e,t,n)=>{n.d(t,{x:()=>l});var a=n(2115),s=n(5163);let i=e=>e.toLowerCase().replace(/[\\/]+$/,"");var r=n(7899);let o=e=>t=>t&&"object"==typeof t&&Array.isArray(t[e])?t:null;function l(){var e,t,n,l,c,d,u,h,p,m,f,g,y,x;let[w,v]=(0,a.useState)(null),[b,j]=(0,a.useState)(null),[k,N]=(0,a.useState)(null),[A,I]=(0,a.useState)(null),[S,U]=(0,a.useState)(null),[C,T]=(0,a.useState)(null),[E,L]=(0,a.useState)([]),[F,R]=(0,a.useState)(null),[D,P]=(0,a.useState)(null),[z,M]=(0,a.useState)([]),[O,H]=(0,a.useState)([]),[W,B]=(0,a.useState)(null),[Z,_]=(0,a.useState)(!0),[q,K]=(0,a.useState)(null),[Y,G]=(0,a.useState)(null),[J,V]=(0,a.useState)(!1),[X,$]=(0,a.useState)([]),[Q,ee]=(0,a.useState)(0),[et,en]=(0,a.useState)(0),[ea,es]=(0,a.useState)([]),[ei,er]=(0,a.useState)([]),[eo,el]=(0,a.useState)(null),[ec,ed]=(0,a.useState)(null),[eu,eh]=(0,a.useState)(null),[ep,em]=(0,a.useState)(""),[ef,eg]=(0,a.useState)(null),[ey,ex]=(0,a.useState)(null),[ew,ev]=(0,a.useState)(null),[eb,ej]=(0,a.useState)(!1),ek=(0,a.useRef)(!1),[eN,eA]=(0,a.useState)([]),[eI,eS]=(0,a.useState)([]),[eU,eC]=(0,a.useState)([]),[eT,eE]=(0,a.useState)({}),[eL,eF]=(0,a.useState)({}),[eR,eD]=(0,a.useState)([]),[eP,ez]=(0,a.useState)({}),[eM,eO]=(0,a.useState)([]),[eH,eW]=(0,a.useState)([]),eB=(0,a.useCallback)(e=>{let t=e.toLowerCase();eW(e=>e.includes(t)?e:[...e,t])},[]),eZ=(0,a.useCallback)(e=>{let t=e.toLowerCase();eW(e=>e.filter(e=>e!==t))},[]),e_=(0,r.c)(),eq=(0,a.useCallback)((e,t)=>{let n=[t,e_?"demo=".concat(e_):""].filter(Boolean).join("&");return n?"".concat(e,"?").concat(n):e},[e_]),eK=(0,a.useRef)(0),eY=(0,a.useRef)(0),eG=(0,a.useCallback)(()=>{let e=++eK.current;return fetch(eq("/api/config"),{cache:"no-store"}).then(e=>e.json()).then(t=>{var n,a,s;e<eY.current||(eY.current=e,ed((null==t?void 0:t.config)&&Array.isArray(t.config.roots)?t.config:null),em("string"==typeof(null==t?void 0:t.path)?t.path:""),eg(null!=(n=null==t?void 0:t.configFault)?n:null),ex(null!=(a=null==t?void 0:t.configRecovered)?a:null),ev("boolean"==typeof(null==t?void 0:t.packaged)?t.packaged:null),eh(null!=(s=null==t?void 0:t.startup)?s:null))}).catch(()=>{})},[eq]),eJ=(0,a.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return fetch(eq("/api/insights",e?"fresh=1":""),{cache:"no-store"}).then(e=>e.json()).then(e=>{let t="number"==typeof(null==e?void 0:e.lookAt)?e.lookAt:null,n=null!==t;G(t),V((null==e?void 0:e.looking)===!0),K(n&&Array.isArray(null==e?void 0:e.insights)?e.insights:null),$(Array.isArray(null==e?void 0:e.muted)?e.muted:[]),ee("number"==typeof(null==e?void 0:e.pending)?e.pending:0),en("number"==typeof(null==e?void 0:e.deepTotal)?e.deepTotal:0),es(n&&Array.isArray(null==e?void 0:e.failed)?e.failed:[]),er(n&&Array.isArray(null==e?void 0:e.unscanned)?e.unscanned:[]),(null==e?void 0:e.configChanged)&&eG()}).catch(()=>{})},[eq,eG]),eV=(0,a.useCallback)(()=>fetch(eq("/api/health"),{cache:"no-store"}).then(e=>e.json()).then(e=>{let t=o("urls")(e);t&&j(t)}).catch(()=>{}),[eq]),eX=(0,a.useCallback)(()=>fetch(eq("/api/services"),{cache:"no-store"}).then(e=>e.json()).then(e=>{Array.isArray(null==e?void 0:e.services)&&R(e.services)}).catch(()=>{}),[eq]),e$=(0,a.useCallback)(()=>fetch(eq("/api/expiry"),{cache:"no-store"}).then(e=>e.json()).then(e=>{let t=o("items")(e);t&&N(t)}).catch(()=>{}),[eq]),eQ=(0,a.useCallback)(()=>fetch(eq("/api/connections"),{cache:"no-store"}).then(e=>e.json()).then(e=>{e&&Array.isArray(e.clients)&&(P(e.clients),M(Array.isArray(e.supported)?e.supported:[]),H(Array.isArray(e.remembered)?e.remembered:[]))}).catch(()=>{}),[eq]),e0=(0,a.useCallback)(()=>fetch(eq("/api/connectors/github"),{cache:"no-store"}).then(e=>e.json()).then(e=>{e&&e.state&&"boolean"==typeof e.state.connected&&(B([e.state]),_(!1!==e.appReady))}).catch(()=>{}),[eq]),e1=(0,a.useCallback)(()=>fetch(eq("/api/log"),{cache:"no-store"}).then(e=>e.json()).then(e=>{var t;I(Array.isArray(null==e?void 0:e.events)?e.events:null),U((t=null==e?void 0:e.coverage)&&"object"==typeof t&&("empty"===t.state||"partial"===t.state||"full"===t.state||"truncated"===t.state)&&"number"==typeof t.days&&"boolean"==typeof t.truncated?e.coverage:null),T(Date.now())}).catch(()=>{}),[eq]),e6=(0,a.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e&&ej(!0),fetch(eq("/api/radar",e?"fresh=1":""),{cache:"no-store"}).then(e=>e.json()).then(e=>{var t;let n=o("projects")(e);if(!n)return void v(null);v(n),eg(null!=(t=n.configFault)?t:null),n.demo&&!ek.current&&(ek.current=!0,eS((0,r.k)())),n.configChanged&&eG(),e1()}).catch(()=>{}).finally(()=>ej(!1)),fetch(eq("/api/health"),{cache:"no-store"}).then(e=>e.json()).then(e=>j(o("urls")(e))).catch(()=>{}),fetch(eq("/api/expiry"),{cache:"no-store"}).then(e=>e.json()).then(e=>N(o("items")(e))).catch(()=>{}),e1(),fetch(eq("/api/incidents"),{cache:"no-store"}).then(e=>e.json()).then(e=>L(Array.isArray(null==e?void 0:e.incidents)?e.incidents:[])).catch(()=>{}),eX(),eQ(),e0(),eG(),eJ(e),fetch(eq("/api/pulse"),{cache:"no-store"}).then(e=>e.json()).then(e=>el(e&&"object"==typeof e&&"boolean"==typeof e.visible?e:null)).catch(()=>{}),e_||fetch("/api/status",{cache:"no-store"}).catch(()=>{})},[eq,e_,eG,eJ,e1,eX,eQ,e0]);(0,a.useEffect)(()=>{if(Q<=0)return;let e=setInterval(()=>{("undefined"==typeof document||"visible"===document.visibilityState)&&eJ()},1500);return()=>clearInterval(e)},[Q,eJ]),(0,a.useEffect)(()=>{e6(!1);let e=setInterval(()=>{("undefined"==typeof document||"visible"===document.visibilityState)&&(fetch(eq("/api/health"),{cache:"no-store"}).then(e=>e.json()).then(e=>{let t=o("urls")(e);t&&j(t)}).catch(()=>{}),e1())},6e4),t={current:null},n=()=>{null===t.current&&(t.current=Date.now())},a=()=>{if("undefined"!=typeof document&&"visible"!==document.visibilityState)return;let e=t.current;t.current=null,null!==e&&(Date.now()-e<3e4||e6(!1))},s=()=>"visible"===document.visibilityState?a():n();return window.addEventListener("blur",n),window.addEventListener("focus",a),document.addEventListener("visibilitychange",s),()=>{clearInterval(e),window.removeEventListener("blur",n),window.removeEventListener("focus",a),document.removeEventListener("visibilitychange",s)}},[e6,eq,e1]);let e3=null!=(e=null==w?void 0:w.demo)&&e,e2=e3?eN:null!=(t=null==ec?void 0:ec.pins)?t:[],e4=e3?eI:null!=(n=null==ec?void 0:ec.ignored)?n:[],e8=e3?eU:null!=(l=null==ec?void 0:ec.dismissed)?l:[],e5=e3?eT:null!=(c=null==ec?void 0:ec.views)?c:{},e9=e3?eL:null!=(d=null==ec?void 0:ec.collapsed)?d:{},e7=e3?eP:null!=(u=null==ec?void 0:ec.snoozes)?u:{},te=e=>e4.some(t=>t.id===e),tt=e=>e2.includes(e),tn=(0,a.useCallback)(async e=>{if(e_)return{ok:!0};let t=await fetch("/api/config",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)}).then(e=>e.json()).catch(()=>({ok:!1,message:"Something went wrong - try again."}));return(null==t?void 0:t.ok)&&t.config&&(eY.current=++eK.current,ed(t.config)),(null==t?void 0:t.startup)&&eh(t.startup),null!=t?t:{ok:!1,message:"Something went wrong - try again."}},[e_]),ta=async(e,t,n,a)=>e3?(eS(s=>[...s,{id:e,kind:t,label:n,snapshot:a}]),{ok:!0}):tn({action:"ignore",id:e,kind:t,label:n,snapshot:a}),ts=async(e,t)=>e3?(eC(n=>[...n,{id:e,sentence:t,ts:Date.now()}]),{ok:!0}):tn({action:"dismiss",id:e,sentence:t}),ti=e=>!!(e3&&eR.includes(e))||E.some(t=>t.subjectId===e&&!t.endedTs&&t.acknowledged),tr={};for(let[e,t]of Object.entries(null!=(h=null==w?void 0:w.changes)?h:{}))e3&&eM.includes(e)||(tr[e]=t);let to=e=>eH.includes(e.toLowerCase()),tl=e=>{let t=e.toLowerCase();return eH.some(e=>t===e||t.startsWith(e.endsWith("\\")||e.endsWith("/")?e:e+"\\")||t.startsWith(e+"/"))},tc=(null!=(p=null==w?void 0:w.projects)?p:[]).filter(e=>!te(e.path.toLowerCase())&&!tl(e.path)).sort((e,t)=>Number(tt(t.path.toLowerCase()))-Number(tt(e.path.toLowerCase()))),td=(null!=(m=null==b?void 0:b.urls)?m:[]).filter(e=>!te(e.entry.id)&&!to(e.entry.id)).sort((e,t)=>Number(tt(t.entry.id))-Number(tt(e.entry.id))),tu=new Set((null!=e8?e8:[]).filter(e=>e&&!e.resurface).map(e=>e.id)),th=null===q?null:q.filter(e=>!to(e.id)&&!tu.has(e.id)),tp=(null!=th?th:[]).map(e=>({id:e.id,cat:e.cat})),tm=null===k?null:{...k,items:k.items.filter(e=>!to(e.id))},tf=(null!=(f=null==w?void 0:w.missingRoots)?f:[]).filter(e=>!tl(e)),tg=function(e,t){let n=e.map(e=>({path:e,projects:0})),a=0;for(let e of t){let t=-1,s=-1;if(n.forEach((n,a)=>{if(!function(e,t){let n=i(e),a=i(t);return a===n||a.startsWith(n+"\\")||a.startsWith(n+"/")}(n.path,e.path))return;let r=i(n.path).length;r>s&&(s=r,t=a)}),t<0){a++;continue}n[t].projects++}return{folders:n,total:t.length-a,rendered:t.length,unclaimed:a}}((null!=(g=null==ec?void 0:ec.roots)?g:[]).filter(e=>!tl(e)),tc),ty=new Map;for(let e of tc)ty.set(e.name,(null!=(y=ty.get(e.name))?y:0)+1);let tx=e=>{var t;return(null!=(t=ty.get(e))?t:0)>1},tw=w&&b&&tm&&null!==q&&Array.isArray(w.projects)&&Array.isArray(w.missingRoots)&&Array.isArray(b.urls)&&Array.isArray(tm.items)?(0,s.W8)({projects:tc,urls:td,expiryItems:tm.items,github:null!=(x=w.github)?x:null,incidents:E,missingRoots:tf,ignored:e4,snoozes:e7,isAcked:ti,isDupe:tx,offline:!0===b.offline,unreachedChecks:ea,unscannedSubjects:ei,findings:tp}):null;return{radar:w,health:b,expiry:tm,events:A,logCoverage:S,logReadAt:C,incidents:E,services:F,insights:th,insightsLookAt:Y,insightsLooking:J,insightsMuted:X,insightsPending:Q,insightsDeepTotal:et,insightsFailed:ea,pulse:eo,cfg:ec,startup:eu,configPath:ep,configFault:ef,configRecovered:ey,packaged:ew,demo:e3,scanning:eb,projects:tc,urls:td,pins:e2,ignored:e4,dismissed:e8,views:e5,collapsed:e9,snoozes:e7,changes:tr,attention:tw,missingRoots:tf,watching:tg,clients:D,clientsSupported:z,clientsRemembered:O,connectors:W,connectorsAppReady:Z,refresh:e6,readHealth:eV,readServices:eX,readExpiry:e$,readConnections:eQ,readConnectors:e0,resolveRow:eB,unresolveRow:eZ,post:tn,togglePin:e=>{e3?eA(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]):tn({action:"pin",id:e})},doIgnore:ta,unignore:e=>{e3?eS(t=>t.filter(t=>t.id!==e)):tn({action:"unignore",id:e})},stillIgnore:e=>{e3?eS(t=>t.map(t=>{var n;return t.id===e?{...t,snapshot:{...t.snapshot,...null==(n=t.resurface)?void 0:n.current},resurface:void 0}:t})):tn({action:"stillIgnore",id:e})},doDismiss:ts,undismiss:e=>{e3?eC(t=>t.filter(t=>t.id!==e)):tn({action:"undismiss",id:e})},stillDismiss:e=>{e3?eC(t=>t.map(t=>{var n,a;return t.id===e?{...t,sentence:null!=(a=null==(n=t.resurface)?void 0:n.current)?a:t.sentence,resurface:void 0}:t})):tn({action:"stillDismiss",id:e})},later:e=>{e3?ez(t=>({...t,[e]:new Date(Date.now()+864e5).toISOString()})):tn({action:"later",id:e})},setView:(e,t)=>{e3?eE(n=>({...n,[e]:null!=t?t:void 0})):tn({action:"setView",section:e,view:t})},setCollapsed:(e,t)=>{e3?eF(n=>({...n,[e]:t})):tn({action:"setCollapsed",section:e,collapsed:t})},ack:e=>{if(e3)return void eD(t=>[...t,e]);fetch("/api/incidents",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"ack",subjectId:e})}).then(()=>fetch(eq("/api/incidents"),{cache:"no-store"})).then(e=>e.json()).then(e=>{Array.isArray(null==e?void 0:e.incidents)&&L(e.incidents)}).catch(()=>{})},isAcked:ti,markSeen:e=>{if(0!==e.length){if(e3)return void eO(t=>[...t,...e.map(e=>e.toLowerCase())]);fetch("/api/radar",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"markSeen",paths:e})}).catch(()=>{})}},isIgnored:te,isPinned:tt,isDupe:tx,isRowResolved:to}}},797:(e,t,n)=>{n.d(t,{H_:()=>d,uN:()=>c});var a=n(5155),s=n(2115),i=n(7650);let r="af360-tip",o=null,l=null;function c(e){return e?{"data-tip":e,onPointerEnter:t=>{"mouse"===t.pointerType&&(null==o||o(e,t.currentTarget))},onPointerLeave:()=>null==l?void 0:l(),onFocus:t=>{try{t.currentTarget.matches(":focus-visible")&&(null==o||o(e,t.currentTarget))}catch(e){}},onBlur:()=>null==l?void 0:l()}:{}}function d(){let[e,t]=(0,s.useState)(null),[n,c]=(0,s.useState)(null),d=(0,s.useRef)(null),u=(0,s.useRef)(null),h=(0,s.useRef)(null),p=(0,s.useCallback)(()=>{u.current&&(clearTimeout(u.current),u.current=null),h.current&&(h.current.removeAttribute("aria-describedby"),h.current=null),t(null),c(null)},[]),m=(0,s.useCallback)((e,n)=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{u.current=null,h.current=n,n.setAttribute("aria-describedby",r),c(null),t({text:e,anchor:n.getBoundingClientRect()})},300)},[]);return((0,s.useEffect)(()=>(o=m,l=p,()=>{o=null,l=null}),[m,p]),(0,s.useEffect)(()=>{if(!e)return;let t=e=>{"Escape"===e.key&&p()},n=()=>p();return window.addEventListener("keydown",t),window.addEventListener("scroll",n,!0),window.addEventListener("resize",n),window.addEventListener("pointerdown",n,!0),()=>{window.removeEventListener("keydown",t),window.removeEventListener("scroll",n,!0),window.removeEventListener("resize",n),window.removeEventListener("pointerdown",n,!0)}},[e,p]),(0,s.useLayoutEffect)(()=>{let t;if(!e||!d.current)return;let n=d.current.getBoundingClientRect(),a=e.anchor,s=window.innerWidth,i=window.innerHeight,r=a.top-8,o=i-a.bottom-8;t=n.height+8<=r?a.top-n.height-8:n.height+8<=o?a.bottom+8:r>=o?8:a.bottom+8;let l=a.left+a.width/2-n.width/2;c({top:t,left:l=Math.min(Math.max(8,l),Math.max(8,s-n.width-8))})},[e]),e&&"undefined"!=typeof document)?(0,i.createPortal)((0,a.jsx)("div",{ref:d,id:r,role:"tooltip",className:"tip",dir:"auto",style:n?{insetBlockStart:"".concat(n.top,"px"),left:"".concat(n.left,"px")}:{insetBlockStart:"0px",left:"0px",visibility:"hidden"},children:e.text}),document.body):null}},993:(e,t,n)=>{n.d(t,{XF:()=>a});function a(e,t){return t&&t.text?e?"".concat(e,' "').concat(t.text,'"'):'"'.concat(t.text,'"'):e}},1551:(e,t,n)=>{n.d(t,{$c:()=>i,AR:()=>a,DX:()=>s,rl:()=>r,tr:()=>o});let a={"head.emptyLine":"لا شيء مراقَب بعد","head.downOne":"{0} لا يستجيب","head.downMany":"عدد ما لا يستجيب: {0}","head.incidentUnder":"كل ما عداه يمكن أن ينتظر - هذا هو ما ينبغي النظر إليه","head.needsLine":"{0} أشياء تحتاجك","head.needsUnder":"لا شيء خطير - لكل واحدة سبب","head.quietLine":"كل شيء هادئ","head.quietUnder":"لا شيء يحتاجك - اذهب وابنِ شيئًا","head.quietHandled":"لا شيء جديد يحتاجك - وهناك {0} قيد المعالجة","head.quietMissed":"لا شيء يحتاجك - ولم يتمكن af360 من فحص {0} من الأشياء هذه المرة","head.quietHandledMissed":"لا شيء جديد يحتاجك - هناك {0} قيد المعالجة، ولم يتمكن af360 من فحص {1} من الأشياء هذه المرة","head.needsUnderSafety":"لا شيء خطير - لكل واحدة سبب، و{0} من نتائج الأمان في انتظارك في الاكتشافات","head.safetyLine":"{0} من نتائج الأمان","head.safetyUnder":"في انتظارك في الاكتشافات","head.safetyMissed":"في انتظارك في الاكتشافات - ولم يتمكن af360 من فحص {0} من الأشياء هذه المرة","attn.project.what":"{0} فيه: {1}.","join.and":" و","join.comma":"، ","attn.reason.unsaved":"{0} تغييرات غير محفوظة","attn.reason.unpushed":"{0} إيداعات غير مرفوعة","attn.reason.noBackup":"لا نسخة احتياطية في أي مكان","attn.reason.dupe":"نسخة مكررة خاملة","attn.why.noBackup":"عطل واحد في القرص وتضيع - ونسخة بعيدة تُنهي ذلك في دقيقة.","attn.why.unpushed":"الرفع يكلّف دقيقة؛ وخسارتها تكلّف العمل نفسه.","attn.why.dupe":"نسختان من مشروع واحد تتباعدان بهدوء.","attn.why.unsaved":"العمل غير المحفوظ لا ينجو في أي مكان - ويوم سيئ واحد يكفي لضياعه.","attn.step.commit":"أودِع العمل - فالإيداع يجعله تاريخًا دائمًا.","attn.step.push":"ارفعه مرة واحدة - فتصل نسخة كاملة إلى المستودع البعيد ويزول الخطر.","attn.step.createRepo":"أنشئ مستودعًا فارغًا لدى مستضيف شيفرتك، واربطه، ثم ارفع.","attn.step.keepOne":"أبقِ نسخة واحدة - وأرشِف الأخرى أو احذفها حتى لا يحتار أنت في المستقبل.","attn.ev.changed":"تغيّرت: {0} و{1} غيرها","attn.ev.onlyHere":"{0} إيداعات موجودة على هذا الجهاز فقط","attn.ev.noRemote":"لا يوجد مستودع بعيد مضبوط - وهذا القرص يحمل النسخة الوحيدة","attn.ev.livingCopy":"النسخة الحيّة: {0}","attn.ev.sameRemote":"كلاهما يشير إلى المستودع نفسه: {0}","attn.ev.untouched":"هذه النسخة لم تُمسّ {0}","attn.ev.path":"{0}","unread.what":"لم يستطع af360 إكمال قراءة {0}.","unread.reason":"فحص لم يكتمل","unread.evidence":"لم يستجب git لهذا المجلد، فلا شيء مما يلي حُكمٌ نهائي","unread.why":"لن يخمّن af360 - يفضّل أن يقول إنه لم يستطع النظر على أن يخبرك بشيء غير صحيح.","unread.step":"لا شيء لتفعله: سيحاول الفحص التالي من جديد. وإن استمر في قول ذلك، فالمجلد أو git نفسه هو ما ينبغي فحصه.","attn.down.what":"{0} لا يستجيب.","attn.down.whatStatus":"{0} لا يستجيب (HTTP {1}).","attn.down.whatError":"{0} لا يستجيب - {1}.","attn.down.evUrl":"{0}","attn.down.evAnswer":"آخر استجابة: HTTP {0}","attn.down.evAnswerText":"آخر استجابة: {0}","attn.down.evNoAnswer":"لا استجابة","attn.down.evSince":"متوقف منذ {0}","attn.down.evJust":"توقّف للتوّ","attn.down.step1":"افتح لوحة تحكّم مستضيفك - فأغلب الأعطال خدمة توقّفت أو نشر أخفق.","attn.down.step2":'اضغط "عُلِم" حين تتولّى الأمر؛ فيهدأ الصف ويزول من تلقاء نفسه حين يستجيب الموقع مرة أخرى.',"attn.offline.what":"يبدو أن هذا الجهاز غير متصل بالإنترنت.","attn.offline.why":"قد تكون مواقعك بخير تمامًا - لكن af360 لا يستطيع الوصول إلى أي شيء الآن، فلن يخمّن.","attn.offline.ev1":"لم يستجب أي من المواقع المراقَبة، وعددها {0}","attn.offline.ev2":"ولم ينجح البحث عن النطاق أيضًا","attn.offline.step1":"تحقّق من اتصال هذا الجهاز بالإنترنت - الواي فاي، أو الكابل، أو شبكة خاصة انقطعت.","attn.expiry.certLate":"كان ينبغي أن تتجدّد شهادة {0} تلقائيًا حتى الآن - ولم تتجدّد.","attn.expiry.expires":"تنتهي صلاحية {0} {1}.","attn.expiry.expired":"انتهت صلاحية {0} {1}.","attn.expiry.whySsl":"حين تنقضي، تعرض المتصفحات تحذيرًا مُفزعًا بدل موقعك.","attn.expiry.whyDomain":"بعد ذلك التاريخ يتوقّف عن العمل - والتجديد المبكر لا يكلّف شيئًا.","attn.expiry.userNote":"{0}","attn.expiry.evDate":"التاريخ: {0}","attn.expiry.evJudgment":"{0}","attn.expiry.evNote":'ملاحظتك: "{0}"',"attn.expiry.evIssuer":"المُصدِر: {0}","attn.expiry.stepSsl":"اسأل مستضيفك لماذا لم يصل التجديد - فالشهادات المُدارة تتجدّد وحدها، وتأخّر واحدة يعني أن شيئًا قد تعطّل.","attn.expiry.stepDomain":'جدّده (أو دعه ينقضي عمدًا)، ثم احذف الإدخال من "القادم" أو حدّثه.',"attn.resurface.what":"{0}","attn.resurface.why":"أسكتّ هذا سابقًا - وقد تغيّر الوضع، فيستحق نظرة أخرى.","attn.resurface.evThen":"تُجوهل عند: {0}","attn.resurface.evNow":"والآن: {0}","attn.resurface.step":'اضغط "راقِب من جديد" لإعادته، أو "أبقِه متجاهَلًا" لإسكاته من جديد بأرقام اليوم.',"attn.missing.what":"تعذّر العثور على المجلد {0}","attn.missing.why":"انتقل أو أُعيدت تسميته - وجّهني إلى موضعه الجديد، أو أوقِف مراقبته.","attn.missing.evPath":"المسار المراقَب: {0}","attn.missing.evScan":"توقّف المجلد عن الاستجابة في آخر فحص","attn.missing.step1":'اضغط "ابحث عنه" وتنقّل إلى حيث يوجد المجلد الآن - وسيحلّ محلّ الإدخال القديم.',"attn.missing.step2":'وإن كان قد زال عمدًا، فزرّ "أوقِف المراقبة" يزيله.',"attn.handled.acked":"قيد المعالجة ✓","attn.handled.snoozed":"هادئ حتى الغد","act.save":"احفظ {0}","act.push":"ارفع {0}","act.backUp":"انسخ {0} احتياطيًا","act.duplicate":"احسم أمر نسخة {0} المكرّرة","act.siteDown":"{0} لا يستجيب","act.renew":"جدّد {0}","act.certLate":"تابِع شهادة {0}","act.find":"ابحث عن {0}","act.decide":"احسم أمر {0}","act.offline":"تحقّق من اتصال هذا الجهاز","wk.todoFact":'أقدم ملاحظة كتبتها لنفسك ما زالت مفتوحة، من {0}: "{1}"',"wk.todoWhy":"أقدم ملاحظة كتبتها لنفسك، وما زالت تنتظر","wk.spaceFact":"{0} من مكتبات الشيفرة المُنزَّلة تقبع في مشاريع لم تمسّها منذ أشهر","wk.spaceWhy":"حذفها مجاني، وأمر واحد يعيدها","wk.busiestFact":"{0} هو أكثر مشاريعك نشاطًا، وفيه {1} إيداعًا","wk.busiestWhy":"أكثر ما عملتَ عليه مما تملك","wk.birthdayFact":"يتمّ {0} عامه {1} في {2}","wk.birthdayWhy":"محسوبة من أول إيداع له","disc.unpushed":"{0} إيداعات موجودة على هذا الجهاز وحده، في {1} مشاريع.","disc.noRemote":"{0} مشاريع ليس لها موطن سوى هذا الجهاز.","disc.readmeStubSince":'ما زال ملف README في {0} يقول "{1}" منذ نحو {2}.',"disc.readmeStubWhile":'ما زال ملف README في {0} يقول "{1}" منذ فترة.',"disc.anniversary":"يتمّ {0} عامه {1} {2}.","disc.anniversaryCommits":"يتمّ {0} عامه {1} {2} - و{3} إيداعًا منذ أول إيداع.","disc.whenToday":"اليوم","disc.whenTomorrow":"غدًا","disc.whenOn":"في {0}","disc.abandonedBranches":"{0} فروع متروكة في {1} مشاريع - وأقدمها لم يُمسّ منذ {2} شهرًا.","disc.cloudConfigStale":"{0} مشاريع خاملة ما زالت تحمل إعدادات نشر - وأي شيء ما زال يعمل من أجلها قد يظلّ يُحاسَب.","disc.ageYears":"{0} سنوات","disc.ageDays":"{0} يومًا","disc.identity":"{0} مشاريع تُودِع باسم {1} - وهويتك العامة هي {2}.","disc.syncFolder":"{0} يقع داخل مجلد مزامنة - وتاريخ git وخدمات المزامنة يُفسد بعضها بعضًا.","disc.gitignoreGaps":"{0} مستودعات تتعقّب أشياء يُبقيها .gitignore عادةً خارجها.","disc.historySecretsOne":"يحمل تاريخ git في {0} نصوصًا تشبه مفاتيح الوصول - وللمستودع نسخة بعيدة، والتاريخ ينتقل مع كل استنساخ.","disc.historySecretsMany":"يحمل تاريخ git في {0} مستودعات نصوصًا تشبه مفاتيح الوصول - ولها نسخ بعيدة، والتاريخ ينتقل مع كل استنساخ.","disc.installScripts":"{0} اعتماديات تشغّل شيفرتها الخاصة وقت التثبيت، في {1} مشاريع.","disc.runtimeEolPast":"بلغت نسخة Node.js لديك ({0}) نهاية عمرها في {1} - ما زالت تعمل، لكنها لم تعد تتلقّى إصلاحات أمنية.","disc.runtimeEolSoon":"تبلغ نسخة Node.js لديك ({0}) نهاية عمرها بعد {1} يومًا.","disc.nodeModules":"تزن مجلدات node_modules لديك {0} في {1} مشاريع.","disc.estateStats":"ممتلكاتك {0} سطرًا في {1} مشاريع - أغلبها {2}.","disc.diskWeight":"يشغل {0} في ذواكر الأدوات المؤقتة عبر {1} من المشاريع.","disc.diskWeightPartial":"يشغل {0} في ذواكر الأدوات المؤقتة عبر {1} من المشاريع - ولم يتمكن af360 من قياس {2} مجلدًا آخر.","disc.runtimeCensus":"{0} من المشاريع تطلب إصدار Node لا يعمل على هذا الجهاز.","disc.runtimeCensusUnread":"لم يتمكن af360 من قراءة إصدار Node الذي تطلبه {0} من المشاريع.","disc.frontDoorUnread":"لم يتمكن af360 من قراءة المستودع البعيد لـ {0} من المشاريع، فلم يحكم عليها.","disc.historySecretsCapped":"قرأ af360 تاريخ {0} من أصل {1} مشروعًا في هذا الفحص - ولم يُنظر في البقية","disc.staleRemoteOne":"يشير المستودع البعيد لـ {0} إلى اسم نقله GitHub.","disc.staleRemoteMany":"{0} مشاريع لديها مستودع بعيد يشير إلى اسم نقله GitHub.","disc.ogSharp":"يبدو {0} أنيقًا عند مشاركته - وهذه هي البطاقة التي يراها الناس.","disc.ogSharedBare":"يظهر {0} عاريًا عند مشاركته - بلا {1}.","disc.ogSharedThin":"يظهر {0} ناقصًا عند مشاركته - بلا {1}.","disc.securityHeaders":"يُرسل {0} {1} من {2} من الترويسات الواقية.","disc.mixedContent":"{0} مؤمَّن، لكن {1} من أجزائه تُحمَّل عبر http عادي.","disc.redirectChain":"تمرّ زيارة {0} بـ{1} قفزات قبل أن تستقرّ.","disc.robotsBlocking":"يصرف ملف robots.txt في {0} كل محركات البحث.","disc.dnsWatch":"تغيّرت سجلات DNS الخاصة بـ{0} منذ آخر نظرة.","tip.unsaved":"تغييرات أجريتَها ولم تُحفظ بعد في تاريخ المشروع.","tip.unpushed":"محفوظة على هذا الجهاز، لكنها لم تُرسل بعد إلى النسخة على الإنترنت.","tip.onlyHere":"لا توجد نسخة على الإنترنت. لو تعطّل هذا القرص لضاع العمل.","tip.noHistory":"لا يملك هذا المجلد تاريخ إصدارات، فليس هناك ما تعود إليه.","tip.dormant":"لم يتغيّر شيء في هذا المشروع منذ وقت طويل.","tip.duplicate":"يوجد مجلد آخر على هذا الجهاز يحمل المستودع نفسه - قرأ af360 المستودعين البعيدين ووجدهما متطابقين.","tip.sharesName":"يوجد مجلد آخر على هذا الجهاز يحمل الاسم نفسه، وقد قرأ af360 المستودعين البعيدين: إنه مستودع مختلف، لا نسخة.","tip.clean":"كل شيء محفوظ وله نسخة احتياطية. لا شيء لتفعله هنا.","tip.downloadedCopy":"يبدو هذا شيئًا نزّلتَه لا شيئًا كتبتَه.","tip.remote":"ما إذا كان تاريخ هذا المشروع موجودًا أيضًا على مستودع بعيد ترفع إليه - النسخة التي تبقى بعد هذا الجهاز.","tip.ignore":"توقّف عن ذكر هذا. يبقى مفحوصًا، ولا يعود إلا إذا تغيّر.","tip.later":"أسكِت هذا حتى الغد. يبقى الصف مكانه باهتًا، ويتوقّف عن العدّ.","tip.watch":"أضِف هذا المجلد ليطّلع عليه af360 في كل فحص.","tip.unwatch":"توقّف عن النظر إلى هذا. يُزال من af360 فقط، لا من قرصك أبدًا.","tip.check":"سجّل أنك رأيت هذا وأنك تتولّاه.","tip.pin":"أبقِ هذا في أعلى القائمة.","tip.copyPath":"انسخ موضع هذا المجلد لتلصقه في مكان آخر.","tip.scanNow":"انظر الآن من جديد في كل مجلد وموقع وتاريخ مراقَب.","tip.details":"أظهِر ما رُئي، وما يستحق فعله حياله.","tip.fix":"انظر ما الذي يحدث هنا وما الذي عليك فعله حياله.","tip.copyCommands":"ضع هذه الأوامر بالضبط في حافظتك، جاهزة للّصق في طرفية.","tip.looked":"آخر نظرة كاملة في مجلداتك - أما المواقع فتُفحص كل دقيقة على حدة","tip.copyContext":"ضع في حافظتك ملخصًا قصيرًا عن هذا المشروع، جاهزًا للّصق في مساعد ذكاء اصطناعي. والأسرار تُترك خارجه.","tip.copyEstateReport":"ضع في حافظتك تقرير ممتلكاتك كاملًا، جاهزًا للّصق في مساعد ذكاء اصطناعي. وتُختصر مسارات المجلدات وتُترك الأسرار خارجه.","tip.verdict":"يَعُدّ العمل الموجود على هذا الجهاز وحده، لا غير.","tip.moreActions":"الإجراءات التي نادرًا ما تحتاجها لهذا الصف.","tip.tagLosable":"هذا العمل غير موجود إلا على هذا الجهاز.","tip.tagMoney":"مكلّف أو مكشوف للعامة إن انقضى، لكنه لا يضيع.","tip.tagHygiene":"يستحق الترتيب. ولا شيء في خطر اليوم.","tip.age":"منذ متى وهذا صحيح.","tip.keyboard":"أظهِر كل اختصارات لوحة المفاتيح.","tip.ssl":"الشهادة التي تضع القفل في شريط العنوان.","tip.domain":"التجديد السنوي الذي يُبقي عنوان الويب لك.","tip.detectors":"فحص يجريه af360 أثناء نظره. أوقِف واحدًا فيتوقّف عن العمل.","tip.muteSwitch":"مفعّل: يعمل هذا الفحص. متوقف: يتوقّف عن العمل، وتقول صفحة الاكتشافات ذلك.","tip.updateSwitch":"مفعّل: مرة كل يوم يسأل af360 سجلّ npm - قناة المختبِرين - عمّا إذا كان هناك إصدار أحدث. ولا يُرسل شيء عنك. أما نسخ المتجر فيحدّثها ويندوز بدلًا من ذلك.","tip.chooseExclude":"اختر مجلدًا يتخطّاه كل فحص، حتى لو كان داخل مجلد تراقبه.","tip.markdown":"ملف نصي بسيط تقرؤه أغلب المحرّرات وتطبيقات الملاحظات ومساعدو الذكاء الاصطناعي.","tip.estate":"كل ما بنيتَه: المجلدات والمشاريع والمواقع التي يراقبها af360.","tip.simpleMode":"لغة بسيطة فقط","tip.devMode":"يضيف الرموز والتوقيتات وتفاصيل git","tip.theme":"بدّل بين مظهر النهار والليل","tip.todosTip":"ملاحظات تركتَها في شيفرتك تشير إلى شيء ما زال مطلوبًا. يقرؤها af360 في مكانها ولا يغيّر شيئًا.","tip.reclaimableTip":"مساحة تشغلها مكتبات الشيفرة المُنزَّلة (node_modules) لمشاريع لم تمسّها منذ أشهر. حذفها يحرّر المساحة، وأمر واحد يعيدها.","tip.busiestTip":"محسوب من الإيداعات في تاريخ كل مشروع مراقَب. يقيس كم مرة حفظتَ عملك، لا كم من الوقت أمضيت.","tip.birthdayTip":"محسوب من أول إيداع في تاريخ المشروع، وهو أقدم تاريخ يستطيع المشروع إثباته عن نفسه.","appbar.shortcutsTip":"أظهِر كل اختصارات لوحة المفاتيح.","radar.shareReportTip":"ملف مرتّب بما يحتاج إلى انتباه، لمشاركته أو لصقه في مساعد ذكاء اصطناعي","export.title":"فحص الممتلكات","export.worth":"ما يستحق فعله","export.why":"لماذا يهم","export.fix":"الإصلاح المقترح","export.noNeeds":"لا شيء يحتاج إلى انتباهك الآن.","export.noWorth":"لا اكتشافات مفتوحة الآن.","export.foot":"صُنع بـ af360 من Afeleos - يعمل على جهازك، ولم يغادره شيء مما هنا حتى اخترتَ أنت مشاركة هذا الملف.","room.radar":"الرادار","room.projects":"المشاريع","room.sites":"المواقع","room.discoveries":"الاكتشافات","room.report":"تقرير الممتلكات","room.ahead":"القادم","room.connections":"الاتصالات","room.settings":"الإعدادات","room.log":"السجل","nav.aria":"التنقّل الرئيسي","appbar.scanning":"جارٍ الفحص…","appbar.shortcuts":"الاختصارات","appbar.looked":"آخر نظرة","appbar.aria":"الممتلكات","appbar.roomAria":"الغرفة الحالية","greet.morning":"صباح الخير","greet.afternoon":"مساء الخير","greet.evening":"مساء الخير","pill.hint":"اضغط لتراها","pill.jumpAria":"أظهِر العمل الذي قد يضيع","session.wereIn":"كنت تعمل في","session.subline":"آخر نشاط في المجلدات التي تراقبها","session.uncommittedTail":"ملفات غير مُودَعة","session.clean":"لا شيء معلّق","session.lastCommit":"آخر إيداع","session.touched":"آخر تعديل","session.noRecent":"لا يوجد نشاط حديث - ممتلكاتك بالأسفل","btn.fix":"إصلاح","btn.copyContext":"انسخ ملخص المشروع","btn.details":"التفاصيل","btn.hide":"إخفاء","btn.show":"إظهار","btn.collapse":"طيّ","btn.more":"المزيد","btn.close":"إغلاق","btn.save":"حفظ","btn.cancel":"إلغاء","btn.remove":"إزالة","btn.back":"رجوع","btn.backToRadar":"العودة إلى الرادار","btn.done":"تم","btn.grid":"شبكة","btn.rows":"صفوف","btn.retry":"أعِد المحاولة","btn.goRadar":"اذهب إلى الرادار","btn.watchAgain":"راقِب من جديد","btn.shareReport":"شارك تقريرًا","btn.copyPath":"انسخ المسار","btn.copyAddress":"انسخ العنوان","btn.copyCommands":"انسخ الأوامر","btn.commandsCopied":"تم نسخ الأوامر ✓","btn.watchMore":"راقب مجلدات أخرى","btn.copying":"جارٍ التجميع…","btn.copied":"تم النسخ ✓","btn.copyFailed":"تعذّر النسخ","sec.needsYou":"يحتاج إليك","sec.projects":"المشاريع","sec.sites":"المواقع","sec.discoveries":"الاكتشافات","sec.downloaded":"نسخ مُنزَّلة","sec.next90":"الأيام التسعون القادمة","sec.further":"أبعد من ذلك","sec.anniversaries":"ذكريات سنوية","sec.undetermined":"تعذّر التحديد","sec.addYourOwn":"أضف تاريخًا بنفسك","sec.reportHeading":"ممتلكاتك في لمحة","sec.worthKnowing":"يستحق أن تعرفه","sec.worthWatching":"يستحق المتابعة","sec.worthTracking":"يستحق التتبّع","sec.rightNow":"الآن","sec.inNumbers":"ممتلكاتك بالأرقام","radar.purpose":"كل ما تحتاجه، الآن، في مكان واحد","radar.needsYouAlways":"كلها معروضة دائمًا \xb7 مرتّبة حسب الأهمية","radar.projectsMeta":"نتحقق من النسخ الاحتياطية والعمل غير المحفوظ والنشاط - في كل فحص","radar.sitesMeta":"تُفحص كل دقيقة","radar.discoveriesMeta":"ما تخبرك به ممتلكاتك بهدوء","radar.discoveriesTop3":"نعرض أهم ثلاثة","radar.ignoredStill":"ما زالت تُفحص \xb7 تعود إذا تغيّرت","radar.ignoredLabel":"المتجاهَل","radar.viewAria":"طريقة عرض هذا القسم","radar.whatISaw":"ما الذي رأيته","radar.folder":"المجلد","radar.movedTail":"انتقل - اختر موضعه الجديد. وسيحلّ محلّ الإدخال القديم.","toast.ignored":'تم تجاهل {0} - لم يختفِ، بل انتقل إلى سطر "المتجاهَل" تحت "يحتاج إليك"، وما زال يُفحص.',"tag.losable":"قابل للضياع","tag.money":"تكاليف","tag.hygiene":"ترتيب","act.ignore":"تجاهل","act.ignoreIt":"تجاهله","act.later":"لاحقًا","act.check":"عُلِم","act.handled":"تمّت المعالجة ✓","act.pin":"تثبيت","act.unpin":"إلغاء التثبيت","act.stillIgnore":"أبقِه متجاهَلًا","act.stopWatching":"أوقِف المراقبة","act.stopWatchingFolder":"أوقِف مراقبة هذا المجلد","act.stopWatchingSite":"أوقِف مراقبة هذا الموقع","act.keepWatching":"استمر في المراقبة","act.findIt":"ابحث عنه","act.moreAria":"إجراءات أخرى لهذا الاكتشاف","eff.ignore":"يُخفى حتى يتغيّر","eff.later":"يعود غدًا","eff.stillIgnore":"يبقى مخفيًا","eff.stopWatching":"يُزال من af360 فقط، لا من جهازك","eff.pin":"يبقى في الأعلى","eff.unpin":"يعود إلى ترتيبه الطبيعي","fix.what":"ما الذي يحدث","fix.steps":"ما الذي عليك فعله","fix.commands":"الأوامر","empty.invite":"لا شيء لمراقبته بعد - وهذه بالضبط نقطة البداية المثالية.","empty.line":"يبقي af360 عينه على المجلدات التي تعمل فيها والمواقع التي تملكها، ويخبرك حين يحتاج أحدها إليك - عمل ليس له نسخة في أي مكان، أو موقع توقّف عن الاستجابة، أو تجديد يقترب موعده.","empty.pickFolder":"اختر مجلدًا لمراقبته","empty.pickSite":"راقِب موقعًا إلكترونيًا","empty.someday":"تفكّر في بناء شيء يومًا ما؟ af360 سيكون جاهزًا - وبقاؤه معك لا يكلّفك شيئًا.","site.namePlaceholder":"اسم له (اختياري)","site.addrAria":"عنوان الموقع","site.nameAria":"اسم هذا الموقع","site.add":"راقِبه","site.adding":"جارٍ الإضافة…","site.added":"يراقبه الآن. يفحصه af360 كل دقيقة ما دام يعمل.","site.firstCheck":"الفحص الأول جارٍ…","site.historyBuilds":"السجل يتكوّن","site.sparkAria":"زمن الاستجابة، آخر 24 ساعة","confirm.project":"هذا المشروع ليس له نسخة احتياطية كاملة. أتتجاهله على أي حال؟ لن أذكره بعد الآن.","confirm.projectShort":"هذا المشروع بلا نسخة احتياطية. أتتجاهله على أي حال؟ لن أذكره بعد الآن.","confirm.site":"هذا الموقع لا يستجيب الآن. أتتجاهله على أي حال؟ لن أذكره بعد الآن.","cat.time-capsule":"كبسولة الزمن","cat.safety":"الأمان","cat.money":"المال","cat.identity":"الهوية","cat.health":"الصيانة والترتيب","cat.site":"مواقعك","disc.purpose":"كل ما تخبرك به ممتلكاتك بهدوء، في مكان واحد","disc.emptyInvite":"لا اكتشافات بعد.","disc.emptyLine":"راقِب بعض المجلدات من الرادار، وستبدأ ممتلكاتك بإخبارك بأشياء - عمل لم يُرفَع بعد، وتكاليف منسيّة، ومواقع تستحق نظرة.","disc.mutedTitle":"مكتوم في الإعدادات، فلا يعمل","disc.failedTitle":"لم يكتمل هذه المرة","disc.failedTail":"ما كانت هذه الفحوص لتجده غير موجود في هذه الصفحة. وسيحاول الفحص التالي من جديد.","disc.unmute":"ألغِ الكتم من الإعدادات →","disc.worth":"يستحق أن تفعل:","disc.showMe":"أرِني","disc.seeCard":"انظر البطاقة التي يرسلها","disc.fixSteps":"خطوات الإصلاح","disc.ogBare":"لا عنوان ولا وصف ولا صورة - يظهر الرابط عاريًا.","disc.ogNoTitle":"(بلا عنوان)","projects.purpose":"كل مجلد يراقبه af360، في صفحة واحدة","projects.needingTail":"يحتاج إليك، والباقي نظيف","projects.allClean":"كلها نظيفة","projects.emptyInvite":"لا مشاريع مراقَبة بعد.","projects.emptyLine":"وجِّه af360 إلى مجلد من الرادار، وسيظهر هنا كل ما بداخله.","sites.purpose":"كل موقع يراقبه af360، في صفحة واحدة","sites.checking":"جارٍ فحص مواقعك…","sites.answeringMid":"من","sites.answeringTail":"يستجيب","sites.emptyInvite":"لا مواقع مراقَبة بعد.","sites.emptyLine":"أضِف موقعًا من الرادار، وسيفحصه af360 كل دقيقة ما دام يعمل.","more.seeAllDiscoveries":"اعرض كل الاكتشافات","more.seeAllProjects":"اعرض كل المشاريع","more.seeAllSites":"اعرض كل المواقع","more.cleanBacked":"غيرها، كلها نظيفة ولها نسخ احتياطية","more.clean":"غيرها، كلها نظيفة","more.projects":"غيرها في صفحة المشاريع","more.sitesUp":"غيرها، كلها تستجيب","more.sites":"غيرها في صفحة المواقع","report.purpose":"الصورة كاملة في نظرة واحدة، محفوظة على جهازك","report.sub":'الصورة كاملة في نظرة واحدة. تبقى هذه على جهازك؛ إنها عرضك الشخصي - و"شارك تقريرًا" هو ما يصنع الملف المُعدّ للآخرين.',"report.asOf":"بتاريخ","report.download":"احفظ كصورة","report.downloadText":"حفظ بتنسيق نصي","report.vNeeding":"يحتاج إلى انتباهك","report.vClean":"نظيف وله نسخة احتياطية","report.vSites":"مواقع تستجيب","report.rUnsaved":"عمل غير محفوظ في خطر","report.rNone":"لا شيء ✓","report.rUnpushed":"إيداعات موجودة على هذا الجهاز فقط","report.rEverythingElse":"كل ما عدا ذلك","report.rBackedUp":"له نسخة احتياطية ✓","report.rNoBackup":"لا نسخة في أي مكان سوى هنا","report.rSites":"المواقع","report.rSitesAllUp":"كلها تعمل، بلا أعطال","report.rSitesUpNow":"كلها تعمل الآن","report.rSitesDownTail":"لا يستجيب","report.rNext":"أقرب تاريخ يعنيك","report.langAria":"توزيع شيفرتك حسب اللغة","report.langRest":"كل ما عدا ذلك","report.linesWord":"أسطر","report.fLines":"أسطر برمجية","report.fProjects":"مشاريع","report.fCommits":"إيداعات مُتتبَّعة","report.fLanguagesTail":"لغات، أغلبها","report.worthKnowingSub":"صحيحة ومفيدة، ولا تتطلب أي إجراء - الحقائق التي خلف ممتلكاتك","report.detailsLabel":"التفاصيل","report.catTimeCapsule":"كبسولة الزمن","report.catHousekeeping":"الصيانة والترتيب","report.catHistory":"تاريخ","report.catMilestone":"محطة","report.counting":"جارٍ إحصاء ممتلكاتك… المرة الأولى تستغرق دقيقة.","report.failed":"لم يُحمَّل التقرير - أعِد تحميل الصفحة للمحاولة من جديد.","report.emptyInvite":"لا شيء لإعداد تقرير عنه بعد.","report.emptyLine":"راقِب مجلدًا من الرادار، وسيكتب التقرير نفسه - الأسطر واللغات وتواريخ الميلاد، كل ذلك.","ahead.purpose":"كل ما له تاريخ، قبل أن يفاجئك","ahead.anniversariesMeta":"أعياد ميلاد ممتلكاتك","ahead.add":"أضِف","ahead.adding":"جارٍ الإضافة…","ahead.reading":"جارٍ قراءة الشهادات والسجلات…","ahead.emptyInvite":"لا شيء في الأفق.","ahead.emptyLine":"أضِف التجارب أو التجديدات بالأسفل، أو راقِب موقعًا من الرادار لتتبّع شهادته ونطاقه.","ahead.added":"أُضيف إلى الجدول الزمني.","ahead.namePlaceholder":"تجربة استضافة، تجديد ترخيص…","ahead.notePlaceholder":"ماذا يحدث حينها؟","ahead.nameAria":"الاسم","ahead.dateAria":"التاريخ","ahead.noteAria":"ملاحظة","ahead.weekJudg":"أسبوعك، محسوبًا على هذا الجهاز - ويبدأ أسبوع جديد يوم الاثنين","ahead.nothingWatched":"لا شيء مراقَب بعد","ahead.nothingToDo":"لا شيء لتفعله","ahead.kindSsl":"شهادة SSL","ahead.kindDomain":"تجديد النطاق","ahead.kindManual":"إدخالك أنت","settings.title":"الإعدادات","settings.purpose":"تفضيلاتك - وكلها تعيش في مجلد واحد على جهازك","settings.secScan":"وتيرة الفحص","settings.secLook":"المظهر","settings.secData":"بياناتك","settings.secHow":"كيف يعمل af360","settings.secRules":"القواعد","settings.secDetectors":"كتم نوع من الاكتشافات","settings.secWatching":"قيد المتابعة","settings.cadenceLabel":"كل كم ينبغي أن ألقي نظرة؟","settings.cadenceHelp":"يبدأ فحص القرص عند الفتح، ثم على هذه الوتيرة","settings.cadenceAria":"وتيرة الفحص","settings.cadenceHourly":"كل ساعة","settings.cadence6h":"كل 6 ساعات","settings.cadenceDaily":"مرة كل يوم","settings.cadenceCustom":"مخصّص…","settings.customLabel":"وتيرة مخصّصة","settings.customHelp":"كل كم ساعة؟ من 1 إلى 24 - ولن يمضي على أي شيء أكثر من يوم","settings.hoursAria":"ساعات","settings.customBad":"اختر عددًا صحيحًا من الساعات بين 1 و24.","settings.viewLabel":"العرض الافتراضي","settings.viewHelp":"شبكة أو صفوف - وكل قسم يتذكّر اختيارك الخاص به","settings.viewAria":"العرض الافتراضي","settings.lang":"لغة الواجهة","settings.langAria":"لغة الواجهة","settings.langHelp":"أسماء الغرف والأزرار وعناوين الأقسام والنصوص التوضيحية بالعربية. أما مسارات مجلداتك والنتائج والأوامر والجُمل التي يكتبها af360 عن ممتلكاتك فتبقى بالإنجليزية.","settings.langEn":"English","settings.langAr":"العربية","settings.dataHelp":"مجلداتك المراقَبة ومواقعك وإدخالاتك وتفضيلاتك تعيش في مجلد ~/.af360 على جهازك، ولا مكان غيره. لا يغيّر af360 شيئًا داخل مشاريعك أبدًا: يقرؤها ويخبرك. بلا حسابات، وبلا تتبّع، وبلا خوادم.","settings.updateLabel":"أخبِرني عن الإصدارات الجديدة","settings.on":"مفعّل","settings.off":"متوقف","settings.how1":"يقرأ المجلدات التي تختارها، هنا على هذا الجهاز، ولا يغيّر شيئًا بداخلها أبدًا.","settings.how2":"ينظر إليها عند فتحك af360، ثم مرة أخرى على الوتيرة التي ضبطتها بالأعلى.","settings.how3":"وما دام af360 يعمل، يفحص كل موقع تراقبه مرة في الدقيقة.","settings.how4":"ويقرأ تواريخ الشهادات والنطاقات لتلك المواقع، والتواريخ التي تضيفها بنفسك، ويقول أيها يحتاج إليك فعلًا.","settings.how5":"ويشير إلى حقائق هادئة لاحظها أثناء نظره. تلك اقتراحات، لا إنذارات.","settings.how6":"والملف الوحيد الذي يكتبه هو ملفه الخاص، في مجلد ~/.af360.","settings.rulesMeta":"كلاهما يغذّي المحرّك مباشرة","settings.excludeLabel":"لا تراقب هنا","settings.excludeHelp":"مجلدات يتخطّاها كل فحص - حتى داخل المجلدات المراقَبة","settings.excludePick":"لا تراقب هذا المجلد","settings.alreadyExcluded":"مُتخطّى بالفعل ✓","settings.chooseFolder":"اختر مجلدًا…","settings.muteHelp":"الفواحص المكتومة تتوقف عن العمل، وصفحة الاكتشافات تبيّن أيها متوقف.","settings.muted":"مكتوم","settings.running":"يعمل","diag.title":"شارك تقريرًا تشخيصيًا","diag.intro":"كل ما ينبّه إليه af360 الآن - ما يحتاج إلى انتباه، ولماذا يهم، والإصلاح المقترح - في ملف واحد مرتّب تسلّمه لشخص أو تلصقه في مساعد ذكاء اصطناعي.","diag.safe":"ما تراه هنا هو بالضبط ما سيُحفَظ. تُختصر مسارات المجلدات، ويُخفى كل ما له شكل كلمة مرور أو مفتاح، ولا يُدرَج اسم جهازك أبدًا.","diag.hintText":"يضعه في الحافظة الآن","diag.hintFile":"يحفظ ملفًا نصيًا بسيطًا (.md) تقرؤه المحرّرات ومساعدو الذكاء الاصطناعي","diag.hintPage":"يحفظ صفحة مقروءة يمكنك طباعتها أو حفظها بصيغة PDF","diag.downloadText":"نزِّله كنص","diag.downloadPage":"نزِّله كصفحة","diag.copyForAi":"انسخ تقرير الممتلكات","diag.dialogAria":"تقرير تشخيصي","keys.title":"اختصارات لوحة المفاتيح","keys.rooms":"اذهب إلى غرفة","keys.actions":"افعل شيئًا","keys.doCopy":"انسخ ملخص المشروع الذي كنت تعمل فيه","keys.doHelp":"أظهِر هذه القائمة","keys.doEsc":"أغلِق هذه القائمة","connections.title":"الاتصالات","connections.secIn":"الوكلاء يصلون إلى af360","connections.secOut":"af360 يصل إلى الخارج","connections.secActivity":"النشاط","conn.githubRefused":"رفض GitHub هذا الاتصال","connections.githubReconnect":"أعد ربط GitHub…","connections.refusedLine":"رُفض وصول af360 إلى {0} - أعد الربط لاستعادته. وحتى ذلك الحين لا يجيب GitHub بشيء.","rail.live":"مباشر","rail.log":"السجل \xb7 7 أيام","rail.next":"التالي","rail.configFault":"لا أستطيع قراءة إعداداتك","rail.configFaultSub":"فلا أعرف ما الذي أراقبه","rail.quietSub":"تصل الأحداث والفحوصات هنا","rail.logEmpty":"السجل \xb7 لا شيء بعد","rail.noRecord":"لم يُسجَّل شيء بعد","rail.noRecordSub":"لم يُكمل af360 أي فحص بعد","rail.swept":"تم مسح حالة git","rail.missing":"ما زال مفقودًا","rail.nextSiteCheck":"فحص موقع","rail.nextScan":"فحص مجلدات","rail.nextSsl":"تقييم شهادة SSL","seg.simple":"بسيط","seg.dev":"مطوّر","seg.day":"نهار","seg.night":"ليل","seg.modeAria":"الوضع","seg.themeAria":"المظهر","foot.by":"من","common.scanning":"جارٍ الفحص…","common.loading":"جارٍ إلقاء نظرة…","common.somethingWrong":"حدث خطأ ما - أعِد المحاولة.","fault.invite":"لا أستطيع قراءة إعداداتك","fault.line":"ملف إعداداتك في مكانه الصحيح، لكنني لا أستطيع قراءته، فلا أعرف ما الذي طلبتَ مني مراقبته. ولم أغيّره ولم أكتب فوقه.","fault.whereLabel":"الملف هنا:","fault.fixLead":"ما يُصلح ذلك عادة:","fault.fixOpen":"افتح الملف وتأكّد من اكتماله - فالملف الناقص أو المُحرَّر يدويًا هو السبب المعتاد.","fault.fixRestore":"إن كنت تحتفظ بنسخ احتياطية، فأعِد آخر نسخة سليمة مكانه.","fault.fixRename":"أو غيّر اسم الملف. سيبدأ af360 من جديد، ويبقى ملفك القديم على القرص لتطّلع عليه.","roomError.invite":"لم تُفتح هذه الغرفة","roomError.fixLead":"ما الذي عليك فعله:","stream.starting":"ما زلت أنظر - الفحوصات الأعمق تبدأ الآن، وتصل النتائج هنا كلما انتهت","stream.countingLead":"ما زلت أنظر - انتهى","stream.countingMid":"من","stream.countingTail":"فحصًا أعمق، وتصل النتائج هنا كلما انتهت","setup.look":"ابحث عن مشاريعي","setup.pickMyself":"سأختار المجلد بنفسي","setup.browse":"تصفّح المجلدات","setup.looking":"أبحث في أماكنك المعتادة…","setup.lookAgain":"ابحث من جديد","setup.addAnother":"أضِف مكانًا آخر","setup.whereLooked":"أين بحثت:","setup.nothingNew":"لا جديد","setup.pickWhere":"اختر أين أبحث:","setup.up":"للأعلى","setup.noFolders":"لا مجلدات داخل هذا المجلد.","setup.watchThis":"راقِب هذا المجلد","setup.alreadyWatching":"يراقب هذا المجلد بالفعل ✓","setup.watch":"راقِب","setup.watchAll":"راقِب الكل","setup.watching":"يراقبه ✓","setup.foundCountLead":"وجدت","setup.foundCountTail":"مشروعًا. راقِب ما يهمّك منها:","setup.adding":"جارٍ الإضافة…","setup.noneFound":"لم أجد أي مشاريع جديدة في الأماكن أدناه.","setup.previewOff":"وضع المعاينة - تغييرات الإعدادات متوقفة.","setup.searchFailed":"حدث خطأ أثناء البحث - أعِد المحاولة.","setup.downloadedNote":"داخل مجلد التنزيلات، أو بأسماء تبدو كأرشيف - غالبًا ليست من ممتلكاتك. راقِب ما هو لك منها فعلًا:","setup.downloadedTag":"تبدو نسخة مُنزَّلة","setup.elsewhere":"ليس ما توقّعته؟ قد تكون مشاريعك في مكان آخر - قرص ثانٍ، أو قرص خارجي.","setup.elsewhereBtn":"وجّهني إلى مكان آخر","banner.radarLead":"هذه","banner.radarStrong":"ممتلكات نموذجية","banner.radarRest":'لترى كل شيء وهو يعمل - جرّب "عُلِم" و"تجاهل" و"لاحقًا".',"banner.radarLink":"وجّه af360 إلى مشاريعك الحقيقية","banner.radarTail":"فتصير لك.","banner.discLead":"اكتشافات نموذجية -","banner.discTail":"فتصير هذه لك.","banner.reportLead":"تقرير نموذجي -","banner.reportTail":"فتصير هذه أرقامك.","banner.aheadLead":"جدول زمني نموذجي -","banner.aheadLink":"راقِب مواقعك الحقيقية","banner.aheadTail":"فتظهر هنا تواريخ شهاداتها ونطاقاتها، مع الحكم عليها.","brief.failed":"تعذّر تجميع الملخص - أعِد المحاولة.","brief.redacted":"حُذفت الأسرار","brief.copiedLead":"تم النسخ:"};function s(e){return"room.".concat(e.replace(/^\//,""))}function i(e){return"ar"===e?"ar":"en"}function r(e){return!e||e.startsWith("")?e:""+e+""}function o(e,t,n){if("ar"!==e)return n;let s=a[t];return void 0!==s?s:r(n)}},2696:(e,t,n)=>{n.d(t,{CQ:()=>x,Fb:()=>v,HE:()=>p,I4:()=>f,J6:()=>m,KF:()=>w,M0:()=>b,hR:()=>g,r8:()=>y});var a=n(5155),s=n(2115),i=n(7406),r=n(23),o=n(8261),l=n(436),c=n(5310);n(3034);var d=n(5834),u=n(797);function h(){let[e,t]=(0,s.useState)("idle"),n=(0,s.useRef)(null);(0,s.useEffect)(()=>()=>{n.current&&clearTimeout(n.current)},[]);let a=e=>{t(e),n.current&&clearTimeout(n.current),n.current=setTimeout(()=>t("idle"),2200)};return{state:e,run:async e=>{n.current&&clearTimeout(n.current),t("working");let s=null;try{s=await e()}catch(e){s=null}if(null===s)return void a("failed");try{await navigator.clipboard.writeText(s),a("done")}catch(e){a("failed")}}}}function p(e){var t,n;let{cockpit:s}=e,i=(0,c.kj)(),h=(0,c.cO)();if(s.configFault)return null;let p=(0,o.X2)(s.attention,null!=(n=null==(t=s.radar)?void 0:t.projects)?n:[]);if(!p)return(0,a.jsxs)("a",{className:"radius holding jump",href:"/projects",children:[(0,a.jsx)("div",{className:"radius-head",role:"status",children:(0,a.jsx)(d.uF,{children:i("common.loading",l.UI.common.loading)})}),(0,a.jsx)("span",{className:"radius-hint",children:i("pill.openHint",l.UI.session.verdictOpenHint)})]});let m=(0,o.sx)(p),f=(0,o.Bx)(p),g=(0,r.HU)(s.attention),y=(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"radius-head",children:(0,a.jsx)(c.P,{p:m.headline})}),(0,a.jsx)("div",{className:"radius-under",children:(0,a.jsx)(c.P,{p:m.under})}),f&&(0,a.jsx)("div",{className:"radius-excluded",children:(0,a.jsx)(c.P,{p:f})})]}),x="clean"===m.tone?"ok":"risk";return 0===g.length?(0,a.jsxs)("a",{className:"radius ".concat(x," jump"),href:"/projects",children:[(0,a.jsx)("div",{role:"status",children:y}),(0,a.jsx)("span",{className:"radius-hint",children:i("pill.openHint",l.UI.session.verdictOpenHint)})]}):(0,a.jsxs)("a",{className:"radius ".concat(x," jump"),href:"/projects","aria-label":i("pill.jumpAria",l.UI.session.verdictJumpAria),...(0,u.uN)(g.map(e=>e.what).join(" \xb7 ")||h.verdict),children:[y,(0,a.jsx)("span",{className:"radius-hint",children:i("pill.hint",l.UI.session.verdictHint)})]})}let m="data-need";function f(e){let t=e.map(e=>document.querySelector("[".concat(m,"=").concat(JSON.stringify(e),"]"))).filter(e=>null!==e);if(0!==t.length)for(let e of(t[0].scrollIntoView({behavior:"smooth",block:"center"}),t))e.classList.remove("jumped"),e.offsetWidth,e.classList.add("jumped"),setTimeout(()=>e.classList.remove("jumped"),1400)}function g(e){let{text:t,label:n,labelKey:s,title:i}=e,{state:r,run:o}=h(),d=(0,c.kj)();return(0,a.jsx)("button",{className:"b2 q",...(0,u.uN)(i),onClick:()=>o(async()=>t),children:"done"===r?d("btn.copied",l.UI.session.copied):"failed"===r?d("btn.copyFailed",l.UI.session.copyFailed):d(s,n)})}function y(e){let{path:t,label:n,labelKey:s}=e,{state:i,run:r}=h(),o=(0,c.kj)(),d=(0,c.cO)(),p=n?o(null!=s?s:"btn.copyPath",n):o("btn.copyPath",l.UI.session.copyPath);return(0,a.jsx)("button",{className:"b2 q",...(0,u.uN)(d.copyPath),onClick:()=>r(async()=>t),children:"done"===i?o("btn.copied",l.UI.session.copied):"failed"===i?o("btn.copyFailed",l.UI.session.copyFailed):p})}async function x(e,t,n){var a,s,i;let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:(e,t)=>t,c=(null!=(s=null==(a=e.attention)?void 0:a.items)?s:[]).filter(e=>"project"===e.kind&&e.id===t.path.toLowerCase()).map(e=>({what:e.what,why:e.why,steps:e.steps})),d=await fetch("/api/context",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({path:t.path,findings:c,dev:r})}).then(e=>e.json()).catch(()=>null);if(!(null==d?void 0:d.ok)||"string"!=typeof d.text)return null==n||n(o("brief.failed",l.UI.session.briefFailed)),null;let u=[...null!=(i=d.included)?i:[],o("brief.redacted",l.UI.session.briefRedacted)];return null==n||n("".concat(o("brief.copiedLead","Copied:")," ").concat(u.join(", "),".")),d.text}function w(e){let{onToast:t}=e,{state:n,run:s}=h(),i=(0,c.kj)(),r=async()=>{let e=await fetch("/api/handoff",{cache:"no-store"}).then(e=>e.json()).catch(()=>null);if(!(null==e?void 0:e.ok)||"string"!=typeof e.text){var n;return null==t||t(null!=(n=null==e?void 0:e.message)?n:i("brief.failed",l.UI.session.briefFailed)),null}return null==t||t(i("handoff.copied",l.UI.session.handoffCopied)),e.text},o="working"===n?i("btn.copying",l.UI.session.copying):"done"===n?i("btn.copied",l.UI.session.copied):"failed"===n?i("btn.copyFailed",l.UI.session.copyFailed):i("btn.copyHandoff",l.UI.session.copyHandoff);return(0,a.jsx)("button",{className:"b2",disabled:"working"===n,onClick:()=>s(r),children:o})}function v(e){let{cockpit:t,project:n,onToast:r,link:o}=e,{state:d,run:p}=h(),m=(0,c.kj)(),f=(0,c.cO)(),g=(0,s.useContext)(i.vC),y=()=>x(t,n,r,g,m),w="working"===d?m("btn.copying",l.UI.session.copying):"done"===d?m("btn.copied",l.UI.session.copied):"failed"===d?m("btn.copyFailed",l.UI.session.copyFailed):o?m("btn.copyContext",l.UI.session.copyContextShort):m("btn.copyContext",l.UI.session.copyContext);return(0,a.jsx)("button",{className:o?"b2 q":"b2",...(0,u.uN)(f.copyContext),disabled:"working"===d,onClick:()=>p(y),children:w})}function b(e){let{it:t}=e,{state:n,run:s}=h(),i=(0,c.kj)(),r=(0,c.cO)();return t.devSteps&&0!==t.devSteps.length?(0,a.jsx)("button",{className:"b2 q",...(0,u.uN)(r.copyCommands),onClick:()=>s(async()=>{var e;return(null!=(e=t.devSteps)?e:[]).join("\n")}),children:"done"===n?i("btn.commandsCopied",l.UI.session.commandsCopied):"failed"===n?i("btn.copyFailed",l.UI.session.copyFailed):i("btn.copyCommands",l.UI.session.copyCommands)}):null}},3034:(e,t,n)=>{n.d(t,{B:()=>s,En:()=>i,V:()=>r});var a=n(5155);function s(e){let{children:t,mono:n,className:s}=e,i=["data",n?"mono":"",null!=s?s:""].filter(Boolean).join(" ");return(0,a.jsx)("bdi",{dir:"ltr",className:i,children:t})}function i(e){let{children:t,className:n}=e;return(0,a.jsx)("bdi",{dir:"ltr",className:["en",null!=n?n:""].filter(Boolean).join(" "),children:t})}function r(e){let{n:t}=e;return(0,a.jsx)("bdi",{dir:"ltr",className:"data num",children:t})}},4881:(e,t,n)=>{n.d(t,{F:()=>r});var a=n(5155);let s={width:16,height:16,viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,focusable:!1,className:"nicon"},i={fill:"currentColor",stroke:"none"};function r(e){let{name:t}=e;switch(t){case"radar":return(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("circle",{cx:"4.2",cy:"8",r:"1.5",...i}),(0,a.jsx)("path",{d:"M7.4 4.9a4 4 0 0 1 0 6.2"}),(0,a.jsx)("path",{d:"M10.4 3.1a6.4 6.4 0 0 1 0 9.8"})]});case"projects":return(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("circle",{cx:"3.1",cy:"4",r:"1.4",...i}),(0,a.jsx)("path",{d:"M5.8 4h7.3"}),(0,a.jsx)("circle",{cx:"3.1",cy:"8",r:"1.4",...i}),(0,a.jsx)("path",{d:"M5.8 8h7.3"}),(0,a.jsx)("circle",{cx:"3.1",cy:"12",r:"1.4",...i}),(0,a.jsx)("path",{d:"M5.8 12h4.1"})]});case"sites":return(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("circle",{cx:"8",cy:"8",r:"5.6"}),(0,a.jsx)("path",{d:"M2.63 9.6h10.74"}),(0,a.jsx)("circle",{cx:"11.96",cy:"4.04",r:"1.4",...i})]});case"discoveries":return(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("path",{d:"M2.4 11.6 5.6 7.4 8.6 10 11 4.6l2.6 3.6"}),(0,a.jsx)("circle",{cx:"11",cy:"4.6",r:"1.4",...i})]});case"ahead":return(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("path",{d:"M2.2 8h2.9",opacity:".4"}),(0,a.jsx)("circle",{cx:"7",cy:"8",r:"1.5",...i}),(0,a.jsx)("path",{d:"M8.9 8h4.9"})]});case"connections":return(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("circle",{cx:"3.6",cy:"8",r:"1.5",...i}),(0,a.jsx)("path",{d:"M5.5 8h1.9"}),(0,a.jsx)("path",{d:"M8.6 8h1.9"}),(0,a.jsx)("circle",{cx:"12.4",cy:"8",r:"1.5",...i})]});case"settings":return(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("circle",{cx:"8",cy:"8",r:"1.6",...i}),(0,a.jsx)("path",{d:"M8 1.8V4M8 12v2.2M14.2 8H12M4 8H1.8"}),(0,a.jsx)("path",{d:"M10.83 5.17 12.38 3.62M3.62 12.38 5.17 10.83M10.83 10.83l1.55 1.55M3.62 3.62 5.17 5.17"})]});case"report":return(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("path",{d:"M3.8 2.2h8.4a.6.6 0 0 1 .6.6v10.4a.6.6 0 0 1-.6.6H3.8a.6.6 0 0 1-.6-.6V2.8a.6.6 0 0 1 .6-.6Z"}),(0,a.jsx)("path",{d:"M5.6 5.4h4.8M5.6 8h4.8M5.6 10.6h3"})]});case"log":return(0,a.jsx)("svg",{...s,children:(0,a.jsx)("path",{d:"M2.2 10.4h3.2l1.8-5.6 1.8 5.6h4.8"})})}}},5163:(e,t,n)=>{n.d(t,{Pl:()=>f,W8:()=>u,YV:()=>o,ih:()=>p,yy:()=>m,ze:()=>h});var a=n(436),s=n(8706),i=n(7e3),r=n(7470);function o(e,t){var n;return e?null!=(n=e.tones[t])?n:"clean":null}function l(e){return{what:e.what.en,whatP:e.what,why:e.why.en,whyP:e.why,evidence:e.evidence.map(e=>e.en),evidenceP:e.evidence,steps:e.steps.map(e=>e.en),stepsP:e.steps}}function c(e){return{action:e.en,actionP:e}}function d(e){return e?{handledNote:e.en,handledNoteP:e}:{}}function u(e){let t=e=>Array.isArray(e)?e:[],n=t(e.projects),o=t(e.urls),u=t(e.expiryItems),m=t(e.incidents),f=t(e.missingRoots),w=t(e.ignored),{snoozes:v,isAcked:b,isDupe:j,offline:k}=e,N=Date.now(),A=e=>{let t=null==v?void 0:v[e];return!!t&&new Date(t).getTime()>N},I=[],S={};for(let e of n){let t=e.path.toLowerCase(),o=function(e,t,n){var o,l,c,d,u,m,f;let g=[],y=[],x=[],w=[];e.changedTotal>0&&(g.push((0,s.ph)("attn.reason.unsaved","{0} unsaved change".concat(1===e.changedTotal?"":"s"),e.changedTotal)),y.push((0,s.ph)("attn.ev.changed","changed: {0}".concat(e.changedTotal>e.dirtyFiles.length?" and {1} more":""),e.dirtyFiles.join(", "),e.changedTotal-e.dirtyFiles.length))),e.deleted>0&&(g.push((0,s.ph)("attn.reason.deleted","{0} file".concat(1===e.deleted?"":"s"," deleted"),e.deleted)),y.push((0,s.ph)("attn.ev.deleted","deleted: {0}".concat(e.deleted>e.deletedFiles.length?" and {1} more":""),e.deletedFiles.join(", "),e.deleted-e.deletedFiles.length))),e.uncommitted>0&&(x.push((0,s.pl)("attn.step.commit","Commit the work - a commit makes it permanent history.")),w.push('git add -A && git commit -m "wip"')),e.deleted>0&&(x.push((0,s.pl)("attn.step.deleted","If a deletion was not meant, git still holds the file - restore it before committing.")),w.push("git restore --")),(null!=(o=e.ahead)?o:0)>0&&(g.push((0,s.ph)("attn.reason.unpushed","{0} commit".concat(1===e.ahead?"":"s"," not pushed"),null!=(l=e.ahead)?l:0)),y.push((0,s.ph)("attn.ev.onlyHere","{0} commit".concat(1===e.ahead?"":"s"," exist only on this machine"),null!=(c=e.ahead)?c:0)),x.push((0,s.pl)("attn.step.push","Push once - the remote gets a full copy and the risk is gone.")),w.push("git push")),h(e)&&(g.push((0,s.pl)("attn.reason.noBackup","no backup anywhere")),y.push((0,s.pl)("attn.ev.noRemote","no remote is configured - this disk holds the only copy")),x.push((0,s.pl)("attn.step.createRepo","Create an empty repository on your code host, connect it, and push.")),w.push("git remote add origin <url>","git push -u origin main"));let v=e.isGit&&!e.statusKnown;v&&(g.push((0,s.pl)("unread.reason",a.UI.unread.reason)),y.push((0,s.pl)("unread.evidence",a.UI.unread.evidence)),x.push((0,s.pl)("unread.step",a.UI.unread.step)));let b=t?p(e,n):null,j=(null==b?void 0:b.kind)==="duplicate"?b:null,k=!!j&&("dormant"===e.staleness||"forgotten"===e.staleness);if(0===g.length&&k&&j){for(let e of(g.push((0,s.pl)("attn.reason.dupe","a dormant duplicate")),j.others))y.push((0,s.ph)("attn.ev.livingCopy","the living copy: {0}",e.path));let t=(0,i.p8)(e.remoteUrl);t&&y.push((0,s.ph)("attn.ev.sameRemote","both point at the same repository: {0}",t)),e.lastActivity&&(0,r.nW)(e.lastActivity)?y.push((0,s.pl)("attn.ev.untouchedSkew","this copy untouched ".concat(r.lt.since))):y.push((0,s.ph)("attn.ev.untouched","this copy untouched {0}",e.lastActivity?(m=e.lastActivity,(0,r.I)(m)):"for a long time")),x.push((0,s.pl)("attn.step.keepOne","Keep one copy - archive or delete the other so future-you isn't guessing."))}if(0===g.length)return{tone:"clean",what:"",why:"",evidence:[],steps:[]};let N=h(e),A=e.uncommitted>0?"unsaved":(null!=(d=e.ahead)?d:0)>0?"unpushed":N?"unbacked":void 0,I=v&&1===g.length,S="unsaved"===A?(0,s.ph)("act.save","Save {0}",e.name):"unpushed"===A?(0,s.ph)("act.push","Push {0}",e.name):"unbacked"===A?(0,s.ph)("act.backUp","Back up {0}",e.name):I?(0,s.ph)("unread.what","af360 could not finish reading {0}.",e.name):(0,s.ph)("act.duplicate","Decide on {0}'s duplicate",e.name),U=(f=g.map(e=>e.en),(0,s.nn)(f,s.v1.and,s.v1.comma)),C=I?(0,s.ph)("unread.what","af360 could not finish reading {0}.",e.name):{...(0,s.ph)("attn.project.what","{0} has {1}.",e.name,U),list:{slot:1,items:g}},T=I?(0,s.pl)("unread.why",a.UI.unread.why):N?(0,s.pl)("attn.why.noBackup","One disk failure and it's gone - a remote copy fixes that in a minute."):(null!=(u=e.ahead)?u:0)>0&&0===e.uncommitted?(0,s.pl)("attn.why.unpushed","A push costs a minute; losing them costs the work."):k&&0===e.uncommitted?(0,s.pl)("attn.why.dupe","Two copies of one project drift apart quietly."):(0,s.pl)("attn.why.unsaved","Unsaved work survives nowhere - one bad day and it's gone.");return y.push((0,s.ph)("attn.ev.path","{0}","path: ".concat(e.path))),{tone:"amber",what:C.en,why:T.en,whatP:C,whyP:T,since:e.lastActivity?new Date(e.lastActivity).getTime():void 0,evidence:y.map(e=>e.en),evidenceP:y,steps:x.map(e=>e.en),stepsP:x,devSteps:w.length>0?w:void 0,losable:A,action:S.en,actionP:S}}(e,j(e.name),n);S[t]=o.tone,"clean"!==o.tone&&I.push({...o,id:t,kind:"project",label:e.name,handled:A(t)||void 0,handledNote:A(t)?"quiet until tomorrow":void 0,openPath:e.path,laterId:t,ignore:{id:t,kind:"project",label:e.name,atRisk:h(e)}})}let U=e.github;if(U)for(let e of n){let t=U.byPath[e.path.toLowerCase()];if(!(null==t?void 0:t.ok))continue;let n=t.value;if(n.ci.ok&&n.ci.value&&"failing"===n.ci.value.state){var C;let t=n.ci.value,a="ci:".concat(e.path.toLowerCase());I.push({id:a,kind:"project",tone:"amber",label:e.name,since:t.at,...l({what:(0,s.ph)("attn.gh.ci.what","{0}'s build failed on {1}.",e.name,t.branch),why:(0,s.pl)("attn.gh.ci.why","GitHub Actions went red - the last push didn't survive CI."),evidence:[(0,s.ph)("attn.gh.ci.ev1","the {0} workflow reported {1}",t.workflow,null!=(C=t.conclusion)?C:"a failure"),(0,s.ph)("attn.gh.ci.ev2","on branch {0}",t.branch),(0,s.ph)("attn.gh.ci.ev3","GitHub last moved this run at {0}",new Date(t.at).toISOString())],steps:[(0,s.pl)("attn.gh.ci.step1","Open the run on GitHub and read the first failing step - the rest usually follow from it."),(0,s.pl)("attn.gh.ci.step2","Nothing here is lost: the commits are pushed. This is about the checks, not the work.")]}),handled:A(a)||void 0,...d(A(a)?(0,s.pl)("attn.handled.snoozed","quiet until tomorrow"):void 0),openPath:e.path,laterId:a,...c((0,s.ph)("act.gh.ci","Read {0}'s failing run on GitHub",e.name))})}if("refuted"===n.backup.verdict){let t=n.backup,a="backup:".concat(e.path.toLowerCase());I.push({id:a,kind:"project",tone:"amber",label:e.name,losable:"unpushed",...l({what:(0,s.ph)("attn.gh.backup.what","{0} says everything is pushed, and GitHub doesn't have it.",e.name),why:(0,s.pl)("attn.gh.backup.why","Local git reports nothing to push and nothing to pull, so this machine and GitHub should be on the same commit. They aren't."),evidence:[(0,s.ph)("attn.gh.backup.ev1","this machine is on {0} at branch {1}",t.localSha.slice(0,12),t.branch),(0,s.ph)("attn.gh.backup.ev2","GitHub's {0} is at {1}",t.branch,t.remoteSha.slice(0,12)),(0,s.pl)("attn.gh.backup.ev3","af360 asked both ends this scan - this is not read from local git's own record of the remote")],steps:[(0,s.pl)("attn.gh.backup.step1","Fetch from the remote and look again - the usual cause is that this machine's record of the remote is out of date."),(0,s.pl)("attn.gh.backup.step2","If the commits really are only here, push them. Until then treat this project as not backed up.")]}),devSteps:["git fetch --all","git status -sb","git log --oneline -1 HEAD"],handled:A(a)||void 0,...d(A(a)?(0,s.pl)("attn.handled.snoozed","quiet until tomorrow"):void 0),openPath:e.path,laterId:a,...c((0,s.ph)("act.gh.backup","Check where {0}'s commits actually are",e.name))})}}if(k&&o.length>0){for(let e of o)S[e.entry.id]="clean";I.push({id:"offline",kind:"site",tone:"amber",label:"Internet connection",...l({what:(0,s.pl)("attn.offline.what","This computer seems to be offline."),why:(0,s.pl)("attn.offline.why","Your sites may be perfectly fine - af360 can't reach anything right now, so it won't guess."),evidence:[(0,s.ph)("attn.offline.ev1","none of the {0} watched sites answered",o.length),(0,s.pl)("attn.offline.ev2","the domain lookup didn't get through either"),(0,s.pl)("attn.offline.ev3","checks keep running while af360 is open; this clears itself the moment something answers")],steps:[(0,s.pl)("attn.offline.step1","Check this machine's internet connection - wifi, cable, or a VPN that dropped."),(0,s.pl)("attn.offline.step2","Nothing to do here once it's back: af360 rechecks every minute while it is open, and clears this on its own.")]}),devSteps:["ping 1.1.1.1","nslookup example.com"],...c((0,s.pl)("act.offline","Check this machine's connection"))})}for(let e of k?[]:o){let t=e.entry.id,n=e.current,a=e.entry.label||function(e){try{return new URL(e).hostname}catch(t){return e}}(e.entry.url);if(!n||n.ok){S[t]="clean";continue}S[t]="red";let i=m.find(e=>e.subjectId===t&&!e.endedTs),r=b(t),o=A(t);I.push({id:t,kind:"site",tone:"red",label:a,...l({what:n.status?(0,s.ph)("attn.down.whatStatus","{0} is down (HTTP {1}).",a,n.status):n.error?(0,s.ph)("attn.down.whatError","{0} is down - {1}.",a,n.error):(0,s.ph)("attn.down.what","{0} is down.",a),why:(0,s.pl)("attn.down.why","af360 asked for your site from this machine and got an error back instead of the page."),evidence:[(0,s.ph)("attn.down.evUrl","{0}",e.entry.url),n.status?(0,s.ph)("attn.down.evAnswer","last answer: HTTP {0}",n.status):n.error?(0,s.ph)("attn.down.evAnswerText","last answer: {0}",n.error):(0,s.pl)("attn.down.evNoAnswer","no answer"),i?(0,s.ph)("attn.down.evSince","down since {0}",new Date(i.startedTs).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})):(0,s.pl)("attn.down.evJust","just went quiet"),(0,s.pl)("attn.down.evCadence","checked every minute while af360 is open; recovery is logged automatically")],steps:[(0,s.pl)("attn.down.step1","Open your host's dashboard - most outages are a crashed service or a failed deploy."),(0,s.pl)("attn.down.step2","Press Check once you're on it; the row calms down and clears itself when the site answers again.")]}),since:null==i?void 0:i.startedTs,handled:r||o||void 0,...d(r?(0,s.pl)("attn.handled.acked","being handled ✓"):o?(0,s.pl)("attn.handled.snoozed","quiet until tomorrow"):void 0),devSteps:["curl -sI ".concat(e.entry.url)],...c((0,s.ph)("act.siteDown","{0} is down",a)),checkId:t,laterId:t,ignore:{id:t,kind:"url",label:a,atRisk:!0}})}for(let e of w){if(!e.resurface)continue;let t="resurface:".concat(e.id);S[t]="amber",I.push({id:t,kind:"resurface",tone:"amber",label:e.label,...l({what:(0,s.ph)("attn.resurface.what","{0}",e.resurface.text),why:(0,s.pl)("attn.resurface.why","You silenced this earlier - the situation moved, so it gets one more look."),evidence:[(0,s.ph)("attn.resurface.evThen","ignored at: {0}",g(e.snapshot)),(0,s.ph)("attn.resurface.evNow","now: {0}",g(e.resurface.current))],steps:[(0,s.pl)("attn.resurface.step","Watch again to bring it back, or Still ignore to re-silence it at today's numbers.")]}),...c((0,s.ph)("act.decide","Decide on {0}",e.label)),resurfaceId:e.id,ignore:{id:e.id,kind:e.kind,label:e.label,atRisk:!1}})}for(let e of u){if(e.manual){if(e.done||null===e.rung||void 0===e.rung){S[e.id]="clean";continue}S[e.id]="amber";let t=A(e.id);I.push({id:e.id,kind:"expiry",tone:"amber",label:e.name,entrusted:!0,cost:e.cost,passed:e.passed,entrustedId:e.id,...l({what:e.passed?(0,s.ph)("attn.entrusted.passed","{0} was due {1}.",e.name,x(e.daysLeft)):(0,s.ph)("attn.entrusted.what","{0} is due {1}.",e.name,x(e.daysLeft)),why:e.note?(0,s.ph)("attn.entrusted.userNote","{0}",e.note):(0,s.pl)("attn.entrusted.why","You asked af360 to tell you about this one."),evidence:[(0,s.pl)("attn.entrusted.evAdded","you added this date"),(0,s.ph)("attn.expiry.evDate","date: {0}",new Date(e.date).toLocaleDateString()),e.note?(0,s.ph)("attn.entrusted.evNote",'what you wrote: "{0}"',e.note):null].filter(e=>null!==e),steps:[(0,s.pl)("attn.entrusted.step","Deal with it, or open Ahead to change the date, mark it done or remove it.")]}),handled:t||void 0,...d(t?(0,s.pl)("attn.handled.snoozed","quiet until tomorrow"):void 0),...c((0,s.ph)("act.entrusted","Deal with {0}",e.name)),laterId:e.id});continue}let t="red"===e.chip||"amber"===e.chip&&"ssl"===e.kind&&e.managed;if(S[e.id]=t?"amber":"clean",!t)continue;let n=A(e.id);I.push({id:e.id,kind:"expiry",tone:"amber",label:e.name,...l({what:"ssl"===e.kind&&e.managed&&"red"!==e.chip?(0,s.ph)("attn.expiry.certLate","{0}'s certificate should have auto-renewed by now - it hasn't.",e.name):e.daysLeft<0?(0,s.ph)("attn.expiry.expired","{0} expired {1}.",e.name,x(e.daysLeft)):(0,s.ph)("attn.expiry.expires","{0} expires {1}.",e.name,x(e.daysLeft)),why:e.note?(0,s.ph)("attn.expiry.userNote","{0}",e.note):"ssl"===e.kind?(0,s.pl)("attn.expiry.whySsl","When it lapses, browsers show a scary warning instead of your site."):(0,s.pl)("attn.expiry.whyDomain","After the date it stops working - renewing early is painless."),evidence:[(0,s.ph)("attn.expiry.evDate","date: {0}",new Date(e.date).toLocaleDateString()),e.judgment?(0,s.ph)("attn.expiry.evJudgment","{0}",e.judgment):e.note?(0,s.ph)("attn.expiry.evNote",'your note: "{0}"',e.note):null,e.issuer?(0,s.ph)("attn.expiry.evIssuer","issuer: {0}",e.issuer):null].filter(e=>null!==e),steps:"ssl"===e.kind?[(0,s.pl)("attn.expiry.stepSsl","Ask your host why the renewal hasn't landed - managed certificates renew on their own, so a late one means something is stuck.")]:[(0,s.pl)("attn.expiry.stepDomain","Renew it (or let it lapse on purpose), then remove or update the entry on Ahead.")]}),handled:n||void 0,...d(n?(0,s.pl)("attn.handled.snoozed","quiet until tomorrow"):void 0),...c("ssl"===e.kind&&e.managed&&"red"!==e.chip?(0,s.ph)("act.certLate","Chase {0}'s certificate",e.name):(0,s.ph)("act.renew","Renew {0}",e.name)),laterId:e.id})}for(let e of f){let t="missing:".concat(e);S[t]="amber",I.push({id:t,kind:"missing",tone:"amber",label:y(e),...l({what:(0,s.ph)("attn.missing.what","The folder {0} can't be found",e),why:(0,s.pl)("attn.missing.why","It moved or was renamed - point me at its new home, or stop watching it."),evidence:[(0,s.ph)("attn.missing.evPath","watched path: {0}",e),(0,s.pl)("attn.missing.evScan","the folder stopped answering on the last scan")],steps:[(0,s.pl)("attn.missing.step1","Press Find it and click through to where the folder lives now - the old entry is replaced."),(0,s.pl)("attn.missing.step2","If it's gone on purpose, Stop watching removes it.")]}),...c((0,s.ph)("act.find","Find {0}",y(e))),findPath:e})}I.sort((e,t)=>{var n,a;return Number(null!=(n=e.handled)&&n)-Number(null!=(a=t.handled)&&a)||Number("red"===t.tone)-Number("red"===e.tone)});let T=I.filter(e=>!e.handled).length,E=I.some(e=>"red"===e.tone&&!e.handled),L=t(e.findings).filter(e=>(null==e?void 0:e.cat)==="safety").length,F=0;if(U){for(let e of n){let t=U.byPath[e.path.toLowerCase()];t&&!t.ok&&F++}U.outage&&F++}return F+=t(e.unreachedChecks).length,{state:E?"INCIDENT":T>0?"NEEDS_YOU":L>0?"SAFETY":"QUIET",open:T,items:I,tones:S,unreached:F+=new Set(t(e.unscannedSubjects)).size,safety:L}}function h(e){return e.isGit&&e.remoteKnown&&!e.hasRemote&&!e.looksDownloaded}function p(e,t){let n=t.filter(t=>t.name===e.name&&t.path!==e.path);if(0===n.length)return null;let a=e.remoteKnown?(0,i.p8)(e.remoteUrl):null,s=e=>e.remoteKnown?(0,i.p8)(e.remoteUrl):null;if(a){let e=n.filter(e=>s(e)===a);if(e.length>0)return{kind:"duplicate",others:e}}return!a||n.some(e=>null===s(e))?{kind:"unproven",others:n}:{kind:"sharesName",others:n}}function m(e){return 0===e.items.length&&0===Object.keys(e.tones).length}function f(e){var t;let n=(e,t)=>({line:e.en,under:t.en,lineP:e,underP:t});if(m(e))return n((0,s.pl)("head.emptyLine","Nothing watched yet"),(0,s.pl)("head.emptyUnder","Point me at a folder and I'll show you the projects inside it."));if("INCIDENT"===e.state){let t=e.items.filter(e=>"red"===e.tone&&!e.handled);return n(1===t.length?(0,s.ph)("head.downOne","{0} is down",t[0].label):(0,s.ph)("head.downMany","{0} down",t.length),1===t.length?(0,s.pl)("head.incidentUnder","everything else can wait - this is the one to look at"):(0,s.pl)("head.incidentUnderMany","everything else can wait - these are the ones to look at"))}if("NEEDS_YOU"===e.state)return e.safety>0?n((0,s.ph)("head.needsLine","{0} need".concat(1===e.open?"s":""," you"),e.open),(0,s.ph)("head.needsUnderSafety","none of it is on fire - each has a reason, and {0} safety finding".concat(1===e.safety?" is":"s are"," waiting in Discoveries"),e.safety)):n((0,s.ph)("head.needsLine","{0} need".concat(1===e.open?"s":""," you"),e.open),(0,s.pl)("head.needsUnder","none of it is on fire - each has a reason"));let a=e.items.filter(e=>e.handled).length,i=null!=(t=e.unreached)?t:0,r=e=>"thing".concat(1===e?"":"s");if("SAFETY"===e.state){let t=e.safety;return n((0,s.ph)("head.safetyLine","{0} safety finding".concat(1===t?"":"s"),t),i>0?(0,s.ph)("head.safetyMissed","".concat(1===t?"it is":"they are"," waiting in Discoveries - and af360 couldn't check {0} ").concat(r(i)," this time"),i):(0,s.pl)("head.safetyUnder","".concat(1===t?"it is":"they are"," waiting in Discoveries")))}return n((0,s.pl)("head.quietLine","All quiet"),a>0?i>0?(0,s.ph)("head.quietHandledMissed","nothing new needs you - {0} item".concat(1===a?" is":"s are"," being handled, and af360 couldn't check {1} ").concat(r(i)," this time"),a,i):(0,s.ph)("head.quietHandled","nothing new needs you - {0} item".concat(1===a?" is":"s are"," being handled"),a):i>0?(0,s.ph)("head.quietMissed","nothing needs you - and af360 couldn't check {0} ".concat(r(i)," this time"),i):(0,s.pl)("head.quietUnder","nothing needs you - go build something"))}function g(e){if(!e)return"nothing recorded";let t=[];return"number"==typeof e.uncommitted&&t.push("".concat(e.uncommitted," unsaved")),!1===e.hasRemote&&t.push("no backup"),e.down&&t.push("down"),t.length>0?t.join(", "):"all fine"}function y(e){var t;let n=e.split(/[\\/]/).filter(Boolean);return null!=(t=n[n.length-1])?t:e}function x(e){return e<0?"".concat(-e," day").concat(-1===e?"":"s"," ago"):0===e?"today":1===e?"tomorrow":"in ".concat(e," days")}},5310:(e,t,n)=>{n.d(t,{Je:()=>y,P:()=>f,T:()=>m,XE:()=>g,cO:()=>h,kj:()=>p,qN:()=>u,sJ:()=>c,uU:()=>d});var a=n(5155),s=n(2115),i=n(1551),r=n(436),o=n(8706),l=n(3034);let c=(0,s.createContext)("en");function d(){return(0,s.useContext)(c)}function u(e){return"ar"!==e?r.eV:new Proxy(r.eV,{get:(e,t)=>{let n=i.AR["tip.".concat(t)];if(void 0!==n)return n;let a=e[t];return"string"==typeof a?(0,i.rl)(a):a}})}function h(){return u((0,s.useContext)(c))}function p(){let e=(0,s.useContext)(c);return(t,n)=>(0,i.tr)(e,t,n)}function m(e){let{k:t,en:n,className:r}=e,o=(0,s.useContext)(c),l=(0,i.tr)(o,t,n);return(0,a.jsx)("span",{className:r,dir:"ar"===o?"auto":void 0,children:l})}function f(e){let{p:t,className:n,lower:r}=e;if("ar"!==(0,s.useContext)(c)){var d;return(0,a.jsx)(a.Fragment,{children:r?(d=t.en).charAt(0).toLowerCase()+d.slice(1):t.en})}let u=i.AR[t.k];return void 0===u?(0,a.jsx)(a.Fragment,{children:(0,i.rl)(t.en)}):(0,a.jsx)("span",{className:n,dir:"auto",children:function e(t,n){return n.split(/\{(\d+)\}/).map((n,s)=>{var r,c;if(s%2==0)return(0,a.jsx)("span",{children:n},s);let d=Number(n);return t.list&&t.list.slot===d?(0,a.jsx)("span",{children:function(t){var n,s;let r=null!=(n=i.AR[o.wo.and])?n:o.v1.and,l=null!=(s=i.AR[o.wo.comma])?s:o.v1.comma,c=[];return t.forEach((n,s)=>{s>0&&c.push((0,a.jsx)("span",{children:s===t.length-1?r:l},"j".concat(s)));let o=i.AR[n.k];c.push(void 0===o?(0,a.jsx)("span",{children:(0,i.rl)(n.en)},"p".concat(s)):(0,a.jsx)("span",{children:e(n,o)},"p".concat(s)))}),c}(t.list.items)},s):(0,a.jsx)(l.B,{children:String(null!=(c=null==(r=t.slots)?void 0:r[d])?c:"")},s)})}(t,u)})}function g(){let e=(0,s.useContext)(c);return t=>"ar"===e?(0,i.rl)(t):t}function y(){let e=(0,s.useContext)(c);return t=>"ar"!==e?t.en:(0,o.DJ)(t,e=>i.AR[e])}},5834:(e,t,n)=>{n.d(t,{gy:()=>s,hI:()=>i,uF:()=>r});var a=n(5155);function s(){return(0,a.jsxs)("span",{className:"ell","aria-hidden":"true",children:[(0,a.jsx)("i",{}),(0,a.jsx)("i",{}),(0,a.jsx)("i",{})]})}function i(e){let{children:t}=e,n=String(null!=t?t:""),i=/…|\.\.\./.exec(n);if(!i)return(0,a.jsx)(a.Fragment,{children:n});let r=n.slice(0,i.index),o=n.slice(i.index+i[0].length);return(0,a.jsxs)(a.Fragment,{children:[r,(0,a.jsx)(s,{}),o]})}function r(e){let{children:t}=e;return(0,a.jsx)("span",{className:"looking",children:(0,a.jsx)(i,{children:t})})}},5964:(e,t,n)=>{n.d(t,{dK:()=>s});let a="[secret masked]";function s(e){let t=e;return(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g,a)).replace(/\b([A-Za-z0-9_.-]*(?:SECRET|TOKEN|PASSWORD|PASSWD|API[_-]?KEY|APIKEY|ACCESS[_-]?KEY|PRIVATE[_-]?KEY|CLIENT[_-]?SECRET|AUTH|CREDENTIAL|[A-Z0-9]_KEY|^KEY)[A-Za-z0-9_.-]*)(\s*[:=]\s*)(["'`]?)([^\s"'`,;]{4,})\3/gi,(e,t,n)=>"".concat(t).concat(n).concat(a))).replace(/\b([A-Za-z0-9_.-]*(?:URL|URI|DSN|CONN)[A-Za-z0-9_.-]*)(\s*[:=]\s*)(["'`]?)([^\s"'`,;]{4,})\3/gi,(e,t,n)=>/[A-Za-z]/.test(t)&&(t.includes("_")||t===t.toUpperCase())?"".concat(t).concat(n).concat(a):e)).replace(/\b([A-Za-z][A-Za-z0-9+.-]*):\/\/([^\s/:@]{1,128}):([^\s/@]{1,256})@/g,(e,t,n)=>"".concat(t,"://").concat(n,":").concat(a,"@")).replace(/(^|[\s(<'"`=,])([A-Za-z0-9._%+-]{1,64}):([^\s:@/\\]{4,128})@((?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,}|\d{1,3}(?:\.\d{1,3}){3}|localhost)(?=[:/?\s'"`)>,]|$)/g,(e,t,n,s,i)=>"".concat(t).concat(n,":").concat(a,"@").concat(i))).replace(/gh[pousr]_[A-Za-z0-9]{16,}|github_pat_[A-Za-z0-9_]{20,}/g,a)).replace(RegExp("(?<![A-Za-z0-9])(AKIA[0-9A-Z]{12,}|ASIA[0-9A-Z]{12,}|sk_(?:live|test)_[0-9A-Za-z]{10,}|rk_(?:live|test)_[0-9A-Za-z]{10,}|pk_live_[0-9A-Za-z]{10,}|glpat-[A-Za-z0-9_-]{16,}|AIza[0-9A-Za-z_-]{30,}|ya29\\.[0-9A-Za-z_-]{20,}|xox[baprs]-[0-9A-Za-z-]{8,}|npm_[A-Za-z0-9]{30,}|dop_v1_[a-f0-9]{40,}|SG\\.[A-Za-z0-9_-]{20,}\\.[A-Za-z0-9_-]{20,}|hf_[A-Za-z0-9]{30,}|sk-ant-[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9]{32,})(?![A-Za-z0-9])","g"),a)).replace(/\b(bearer|basic)\s+[A-Za-z0-9._~+/=-]{12,}/gi,(e,t)=>"".concat(t," ").concat(a))).replace(RegExp("(?<![A-Za-z0-9])eyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}(?![A-Za-z0-9])","g"),a)).replace(RegExp("(?<![A-Za-z0-9])[0-9a-f]{32,}(?![A-Za-z0-9])","gi"),a)).replace(RegExp("(?<![A-Za-z0-9])[A-Za-z0-9+/]{40,}={0,2}(?![A-Za-z0-9+/=])","g"),a)}},6400:(e,t,n)=>{n.d(t,{LZ:()=>p,ZT:()=>d,k4:()=>m,yr:()=>u});var a=n(5155),s=n(2115),i=n(436),r=n(5310),o=n(3034),l=n(4881),c=n(797);function d(e){return(null!=e?e:[]).filter(e=>!!e.proposal)}function u(e){return(null!=e?e:[]).filter(e=>!e.proposal&&!e.dateProposal)}function h(e){let{template:t,slots:n}=e,s=t.split(/(\{\d\})/g);return(0,a.jsx)(a.Fragment,{children:s.map((e,t)=>{let s=/^\{(\d)\}$/.exec(e);if(!s)return(0,a.jsx)("span",{children:e},t);let i=n[Number(s[1])];return void 0===i?(0,a.jsx)("span",{children:e},t):(0,a.jsx)(o.B,{children:i},t)})})}function p(e){let{cockpit:t,heading:n=!0}=e,s=d(t.insights);return 0===s.length?null:(0,a.jsxs)(a.Fragment,{children:[n&&(0,a.jsxs)("div",{className:"sec",children:[(0,a.jsx)("h2",{children:(0,a.jsx)(r.T,{k:"sec.worthWatching",en:i.UI.radar.proposals})}),(0,a.jsxs)("span",{className:"meta",children:[(0,a.jsx)(o.V,{n:s.length})," ",(0,a.jsx)(r.T,{k:"radar.proposalsMeta",en:i.UI.radar.proposalsMeta})]})]}),s.map(e=>(0,a.jsx)(g,{id:e.id,p:e.proposal,cockpit:t},e.id))]})}function m(e){let{cockpit:t,offers:n,onTrack:s}=e,l=n.filter(e=>!t.isRowResolved("dateoffer:".concat(e.host)));return 0===l.length?null:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"sec",children:[(0,a.jsx)("h2",{children:(0,a.jsx)(r.T,{k:"sec.worthTracking",en:i.UI.ahead.secSuggested})}),(0,a.jsxs)("span",{className:"meta",children:[(0,a.jsx)(o.V,{n:l.length})," ",(0,a.jsx)(r.T,{k:"ahead.suggestedMeta",en:i.UI.ahead.suggestedMeta})]})]}),l.map(e=>(0,a.jsx)(f,{p:e,cockpit:t,onTrack:s},e.host))]})}function f(e){let{p:t,cockpit:n,onTrack:d}=e,[u,p]=(0,s.useState)(!1),[m,f]=(0,s.useState)(null),[g,y]=(0,s.useState)(null),x=(0,r.kj)(),w=(0,r.cO)(),v=(0,s.useRef)(null);(0,s.useEffect)(()=>()=>{v.current&&clearTimeout(v.current)},[]);let b=()=>{v.current=setTimeout(()=>n.resolveRow("dateoffer:".concat(t.host)),1400)},j=async()=>{var e;p(!0),y(null);let a=await n.post({action:"declineDate",host:t.host,citation:t.citation});p(!1),a.ok?(f(x("ahead.suggestSetAside",i.UI.ahead.suggestSetAside)),b()):y(null!=(e=a.message)?e:x("common.somethingWrong",i.UI.common.somethingWrong))};return(0,a.jsxs)("div",{className:"need propose",children:[(0,a.jsx)("span",{className:"glyph","aria-hidden":!0,children:(0,a.jsx)(l.F,{name:"ahead"})}),(0,a.jsxs)("div",{className:"txt",children:[(0,a.jsx)("b",{children:(0,a.jsx)(o.B,{children:t.name})}),(0,a.jsx)("span",{children:"certificate"===t.file?(0,a.jsx)(h,{template:x("ahead.suggestFromCert",i.UI.ahead.suggestFromCert),slots:[t.host]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(h,{template:x("radar.proposalNamedIn",i.UI.radar.proposalNamedIn),slots:[t.file,String(t.line)]})," ",(0,a.jsx)(h,{template:x("radar.proposalIn",i.UI.radar.proposalIn),slots:[t.project]})]})}),t.changed&&(0,a.jsx)("span",{className:"changed",children:(0,a.jsx)(h,{template:x("radar.proposalChanged",i.UI.radar.proposalChanged),slots:[t.changed.before,t.changed.after]})})]}),(0,a.jsx)("div",{className:"acts",children:m?(0,a.jsx)("span",{className:"ok-line",children:m}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{className:"b2",disabled:u,onClick:()=>{d(t),f(x("ahead.suggestFilled",i.UI.ahead.suggestFilled)),b()},children:(0,a.jsx)(r.T,{k:"ahead.suggestAdd",en:i.UI.ahead.suggestAdd})}),(0,a.jsx)("button",{className:"b2 q",...(0,c.uN)(w.ignore),disabled:u,onClick:j,children:(0,a.jsx)(r.T,{k:"ahead.suggestNo",en:i.UI.ahead.suggestNo})})]})}),g&&(0,a.jsx)("span",{className:"error-line",style:{flexBasis:"100%"},children:g})]})}function g(e){let{id:t,p:n,cockpit:d}=e,[u,p]=(0,s.useState)(null),[m,f]=(0,s.useState)(null),[g,y]=(0,s.useState)(null),x=(0,r.kj)(),w=(0,r.cO)(),v=(0,s.useRef)(null);(0,s.useEffect)(()=>()=>{v.current&&clearTimeout(v.current)},[]);let b=()=>{v.current=setTimeout(()=>d.resolveRow(t),1400)},j=async()=>{var e;p("watch"),y(null);let t=await d.post({action:"addUrl",url:n.url});p(null),t.ok?(f(x("site.added",i.UI.radar.siteAdded)),d.readHealth(),b()):y(null!=(e=t.message)?e:x("common.somethingWrong",i.UI.common.somethingWrong))},k=async()=>{var e;p("decline"),y(null);let t=await d.post({action:"declineSite",host:n.host,citation:n.citation});p(null),t.ok?(f(x("site.setAside",i.UI.radar.proposalSetAside)),b()):y(null!=(e=t.message)?e:x("common.somethingWrong",i.UI.common.somethingWrong))};return(0,a.jsxs)("div",{className:"need propose",children:[(0,a.jsx)("span",{className:"glyph","aria-hidden":!0,children:(0,a.jsx)(l.F,{name:"sites"})}),(0,a.jsxs)("div",{className:"txt",children:[(0,a.jsx)("b",{children:(0,a.jsx)(o.B,{children:n.host})}),(0,a.jsxs)("span",{children:[(0,a.jsx)(h,{template:x("radar.proposalNamedIn",i.UI.radar.proposalNamedIn),slots:[n.file,String(n.line)]})," ",(0,a.jsx)(h,{template:x("radar.proposalIn",i.UI.radar.proposalIn),slots:[n.project]})]}),n.changed&&(0,a.jsx)("span",{className:"changed",children:(0,a.jsx)(h,{template:x("radar.proposalChanged",i.UI.radar.proposalChanged),slots:[n.changed.before,n.changed.after]})})]}),(0,a.jsx)("div",{className:"acts",children:m?(0,a.jsx)("span",{className:"ok-line",children:m}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{className:"b2",...(0,c.uN)(w.watch),disabled:null!==u,onClick:j,children:"watch"===u?x("site.adding",i.UI.radar.siteAdding):x("site.add",i.UI.radar.siteAdd)}),(0,a.jsx)("button",{className:"b2 q",...(0,c.uN)(w.ignore),disabled:null!==u,onClick:k,children:(0,a.jsx)(r.T,{k:"site.notThisOne",en:i.UI.radar.proposalNotThis})})]})}),g&&(0,a.jsx)("span",{className:"error-line",style:{flexBasis:"100%"},children:g})]})}},7e3:(e,t,n)=>{function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:46;if(e.length<=t)return e;let n=Math.floor((t-1)*.6);return"".concat(e.slice(0,t-1-n),"…").concat(e.slice(e.length-n))}function s(e){try{return new URL(e).hostname.toLowerCase()}catch(e){return null}}function i(e){if(!e)return null;let t=e.trim();if(!t)return null;let n=null,a=null,s=/^(?:[^@/]+@)?([A-Za-z0-9._-]+):(?!\/\/)(.+)$/.exec(t);if(s&&!/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(t))n=s[1],a=s[2];else try{let e=new URL(t);n=e.hostname,a=e.pathname}catch(e){return null}let i=(null!=a?a:"").replace(/^\/+/,"").replace(/\/+$/,"").replace(/\.git$/i,"");return n&&i?"".concat(n.toLowerCase(),"/").concat(i.toLowerCase()):null}n.d(t,{Pm:()=>s,oV:()=>a,p8:()=>i})},7406:(e,t,n)=>{n.d(t,{vC:()=>K,fV:()=>J,Ay:()=>$,cB:()=>G});var a=n(5155),s=n(2115),i=n(2696),r=n(23),o=n(436),l=n(5310),c=n(1551);let d=[{keys:["g","r"],label:o.UI.keys.goRadar,href:"/radar"},{keys:["g","d"],label:o.UI.keys.goDiscoveries,href:"/discoveries"},{keys:["g","e"],label:o.UI.keys.goReport,href:"/report"},{keys:["g","a"],label:o.UI.keys.goAhead,href:"/ahead"},{keys:["g","s"],label:o.UI.keys.goSettings,href:"/settings"}],u=[{keys:["s"],label:o.UI.keys.doScan,labelKey:"appbar.scan"},{keys:["c"],label:o.UI.keys.doCopy,labelKey:"keys.doCopy"},{keys:["?"],label:o.UI.keys.doHelp,labelKey:"keys.doHelp"},{keys:["Esc"],label:o.UI.keys.doEsc,labelKey:"keys.doEsc"}],h="af360-shortcuts";function p(e){let{cockpit:t}=e,[n,p]=(0,s.useState)(!1),[m,f]=(0,s.useState)(null),g=(0,s.useRef)(null),y=(0,l.kj)(),x=(0,s.useContext)(K);return(0,s.useEffect)(()=>{let e=e=>{f(e),setTimeout(()=>f(t=>t===e?null:t),4500)},a=async()=>{let n=(0,r.sp)(t.projects,Date.now());if(!n||n.stale||t.demo){null==e||e(y("keys.noProject",o.UI.keys.noProject));return}let a=await (0,i.CQ)(t,n.project,e,x,y);if(null!==a)try{await navigator.clipboard.writeText(a)}catch(t){null==e||e(o.UI.session.copyFailed)}},s=e=>{if(e.ctrlKey||e.metaKey||e.altKey)return;if("Escape"===e.key){n&&(p(!1),e.preventDefault());return}if(function(e){if(!e||"string"!=typeof e.tagName)return!1;let t=e.tagName.toLowerCase();return"input"===t||"textarea"===t||"select"===t||!0===e.isContentEditable}(e.target))return;let s=Date.now(),i=g.current&&s-g.current.ts<1400?g.current.key:null;if(g.current=null,"g"===i){let t=d.find(t=>t.keys[1]===e.key.toLowerCase());if(t){var r;e.preventDefault(),r=t.href,window.location.href=r}return}let o=e.key;if("?"===o){e.preventDefault(),p(e=>!e);return}if("g"===o.toLowerCase()){g.current={key:"g",ts:s};return}if("s"===o.toLowerCase()){e.preventDefault(),t.refresh(!0);return}if("c"===o.toLowerCase()){e.preventDefault(),a();return}},l=()=>p(!0);return window.addEventListener("keydown",s),window.addEventListener(h,l),()=>{window.removeEventListener("keydown",s),window.removeEventListener(h,l)}},[t,n]),(0,a.jsxs)(a.Fragment,{children:[m&&(0,a.jsx)("div",{className:"toast",role:"status",children:m}),n&&(0,a.jsx)("div",{className:"confirm-overlay",role:"dialog","aria-modal":"true","aria-label":y("keys.title",o.UI.keys.aria),onClick:e=>{e.target===e.currentTarget&&p(!1)},children:(0,a.jsxs)("div",{className:"confirm keysheet",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{children:y("keys.title",o.UI.keys.title)}),(0,a.jsx)("p",{className:"keysub",children:y("keys.sub",o.UI.keys.sub)})]}),(0,a.jsxs)("div",{className:"keygroup",children:[(0,a.jsx)("div",{className:"k",children:y("keys.rooms",o.UI.keys.rooms)}),d.map(e=>(0,a.jsxs)("div",{className:"keyrow",children:[(0,a.jsxs)("span",{className:"keys",children:[(0,a.jsx)("span",{className:"kbd",children:e.keys[0]}),"+",(0,a.jsx)("span",{className:"kbd",children:e.keys[1]})]}),(0,a.jsx)("span",{children:(0,a.jsx)(l.T,{k:(0,c.DX)(e.href),en:e.label})})]},e.href))]}),(0,a.jsxs)("div",{className:"keygroup",children:[(0,a.jsx)("div",{className:"k",children:y("keys.actions",o.UI.keys.actions)}),u.map(e=>(0,a.jsxs)("div",{className:"keyrow",children:[(0,a.jsx)("span",{className:"keys",children:(0,a.jsx)("span",{className:"kbd",children:e.keys[0]})}),(0,a.jsx)("span",{children:y(e.labelKey,e.label)})]},e.label))]}),(0,a.jsx)("div",{className:"setup-actions",children:(0,a.jsx)("button",{className:"b accent",onClick:()=>p(!1),children:y("btn.close",o.UI.keys.close)})})]})})]})}var m=n(7861),f=n(8938);let g="af360-favicon";function y(e){let{cockpit:t}=e,n=t.configFault||!t.attention?"unknown":"QUIET"===t.attention.state?"quiet":"needs";return(0,s.useEffect)(()=>{let e=document.getElementById(g);e||((e=document.createElement("link")).id=g,e.rel="icon",e.type="image/svg+xml",document.head.appendChild(e));let t=(0,f.CV)(n);e.href!==t&&(e.href=t),document.documentElement.dataset.favicon=n},[n]),null}var x=n(5163),w=n(7470),v=n(4576),b=n(4881),j=n(3034),k=n(5834),N=n(797),A=n(6400),I=n(8713),S=n(8706),U=n(5964),C=n(993),T=n(8261),E=n(9378),L=n(9129);function F(e){let t=e.filter(Boolean),n=t.slice(-2).join("/");return t.length>2?"…/"+n:n}function R(e){let t=e;return(t=(t=function(e){let t=new Map;return String(e).replace(/[A-Za-z0-9._%+-]+@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)*\.[A-Za-z]{2,})/g,e=>{let n;return t.has(e)||t.set(e,t.size+1),n=t.get(e),"[email ".concat(n," hidden]")})}(t=(0,U.dK)(t))).replace(/[A-Za-z]:\\[^\s"'`,;]+/g,e=>F(e.split("\\")))).replace(/(^|\s)(\/(?:home|Users)\/[^\s"'`,;]+)/g,(e,t,n)=>t+F(n.split("/")))}let D={title:"export.title",intro:"diag.intro",safe:"diag.safe",needs:"sec.needsYou",worth:"export.worth",why:"export.why",fix:"export.fix",details:"report.detailsLabel",noNeeds:"export.noNeeds",noWorth:"export.noWorth",foot:"export.foot"},P={title:"Estate check",intro:"A snapshot from ".concat(v.qt," of what is worth your attention right now. Folder paths are shortened and anything shaped like a password or key is hidden, so this file is safe to hand to someone or paste into an AI assistant."),safe:"Folder paths shortened, anything shaped like a password or key hidden, machine name never included.",needs:"Needs attention",worth:"Worth doing",why:"Why it matters",fix:"Suggested fix",details:"Details",noNeeds:"Nothing needs attention right now.",noWorth:"No open discoveries right now.",foot:"Made with ".concat(v.qt," by ").concat(v.rM," - it runs on your machine, and nothing here left it until you chose to share this file.")};function z(e){return"ar"!==e?"en":Object.values(D).every(e=>void 0!==c.AR[e])?"ar":"en"}function M(e){let t=z(e),n={};for(let[e,s]of Object.entries(D)){var a;n[e]="ar"===t&&null!=(a=c.AR[s])?a:P[e]}return n}function O(e,t,n){return"ar"===e&&t?(0,S.DJ)(t,e=>c.AR[e]):n}function H(e,t){var n,a,s;return{needs:(null!=(a=null==(n=e.attention)?void 0:n.items)?a:[]).filter(e=>!e.handled).map(e=>{var n;return{title:R(O(t,e.whatP,e.what)),why:e.why?R(O(t,e.whyP,e.why)):void 0,fixes:(null!=(n=e.steps)?n:[]).map((n,a)=>{var s;return R(O(t,null==(s=e.stepsP)?void 0:s[a],n))})}}),worth:(null!=(s=e.insights)?s:[]).map(e=>{var n;return{title:R(O(t,e.verdictP,e.verdict)),why:e.why?R((0,C.XF)(e.why,e.quoted)):void 0,fixes:(null!=(n=e.steps)?n:[]).map(R),cat:e.cat}})}}function W(e,t){if(!e)return null;let n=z(t),a=null===e.since?"":(0,w.OL)(e.since);return(0,E.lz)(e,(e,t)=>{var a;return"ar"===n&&null!=(a=c.AR[e])?a:t},a)}function B(e){let t=(0,T.X2)(e.attention,e.projects);if(!t)return null;let n=(0,T.sx)(t),a=(0,T.Bx)(t);return"".concat(n.headline.en," ").concat(n.under.en).concat(a?" ".concat(a.en):"")}function Z(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function _(e,t,n){let a=new Blob([n],{type:t}),s=URL.createObjectURL(a),i=document.createElement("a");i.download=e,i.href=s,i.click(),setTimeout(()=>URL.revokeObjectURL(s),2e3)}function q(e){let{cockpit:t,onClose:n}=e,[i]=(0,s.useState)(()=>Date.now()),[r,c]=(0,s.useState)(!1),d=(0,l.kj)(),u=(0,l.cO)(),h=(0,l.uU)(),{delta:p}=(0,L.K)(t),m=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"en",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,{needs:s,worth:i}=H(e,z(n)),r=M(n),o=(0,w.OL)(t),l=[];l.push("# ".concat(r.title," - ").concat(o)),l.push(""),l.push(r.intro),l.push("");let c=W(a,n);c&&(l.push(c),l.push(""));let d=B(e);return d&&(l.push(d),l.push("")),l.push("Summary: ".concat(s.length," thing").concat(1===s.length?"":"s"," need").concat(1===s.length?"s":""," attention, ").concat(i.length," discover").concat(1===i.length?"y":"ies"," worth a look.")),l.push(""),l.push("## ".concat(r.needs," (").concat(s.length,")")),l.push(""),0===s.length&&l.push(r.noNeeds),s.forEach((e,t)=>{l.push("### ".concat(t+1,". ").concat(e.title)),e.why&&l.push("- ".concat(r.why,": ").concat(e.why)),e.fixes.length>0&&(l.push("- ".concat(r.fix,":")),e.fixes.forEach(e=>l.push(" - ".concat(e)))),l.push("")}),l.push("## ".concat(r.worth," (").concat(i.length,")")),l.push(""),0===i.length&&l.push(r.noWorth),i.forEach(e=>{l.push("### ".concat(e.cat?"`".concat(e.cat,"` "):"").concat(e.title)),e.why&&l.push("- ".concat(r.why,": ").concat(e.why)),e.fixes.length>0&&(l.push("- ".concat(r.fix,":")),e.fixes.forEach(e=>l.push(" - ".concat(e)))),l.push("")}),l.push("---"),l.push(r.foot),l.join("\n")}(t,i,h,p),f=(0,w.rq)(i),g=async()=>{try{await navigator.clipboard.writeText(m),c(!0),setTimeout(()=>c(!1),2e3)}catch(e){}};return(0,a.jsx)("div",{className:"confirm-overlay",role:"dialog","aria-modal":"true","aria-label":d("diag.dialogAria",o.UI.diag.dialogAria),onClick:n,children:(0,a.jsxs)("div",{className:"diag",onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("div",{className:"diag-head",children:[(0,a.jsx)("h2",{children:d("diag.title",o.UI.diag.title)}),(0,a.jsx)("p",{children:d("diag.intro",o.UI.diag.intro)}),(0,a.jsxs)("div",{className:"diag-safe",children:[(0,a.jsx)("i",{}),d("diag.safe",o.UI.diag.safe)]})]}),(0,a.jsx)("div",{className:"diag-preview",children:(0,a.jsx)("pre",{children:m})}),(0,a.jsxs)("p",{className:"diag-hint",children:[(0,a.jsx)("b",{children:d("diag.copyForAi",o.UI.diag.copyForAi)})," ",d("diag.hintText",o.UI.diag.hintText)," \xb7 ",(0,a.jsx)("b",{children:d("diag.downloadText",o.UI.diag.downloadText)})," ",d("diag.hintFile",o.UI.diag.hintFile)," \xb7",(0,a.jsxs)("b",{children:[" ",d("diag.downloadPage",o.UI.diag.downloadPage)]})," ",d("diag.hintPage",o.UI.diag.hintPage),"."]}),(0,a.jsxs)("div",{className:"diag-acts",children:[(0,a.jsx)("button",{className:"btn primary",...(0,N.uN)(u.markdown),onClick:()=>_("estate-check-".concat(f,".md"),"text/markdown",m),children:d("diag.downloadText",o.UI.diag.downloadText)}),(0,a.jsx)("button",{className:"btn",onClick:()=>_("estate-check-".concat(f,".html"),"text/html",function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"en",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,{needs:s,worth:i}=H(e,z(n)),r=M(n),o="ar"===z(n),l=(0,w.OL)(t);return'<!doctype html><html lang="'.concat(o?"ar":"en",'" dir="').concat(o?"rtl":"ltr",'"><head><meta charset="utf-8">\n<meta name="viewport" content="width=device-width, initial-scale=1">\n<title>').concat(Z(r.title)," - ").concat(Z(l),"</title>\n<style>\n :root { color-scheme: dark; }\n * { box-sizing: border-box; }\n body { margin: 0; background: #0A0D14; color: #E7ECF4; font: 15px/1.55 -apple-system, Segoe UI, system-ui, sans-serif; }\n main { max-width: 720px; margin: 0 auto; padding: 40px 24px 64px; }\n /* the masthead line, and the wordmark it carries */\n .brandline { font-weight: 800; font-size: 18px; margin: 0 0 14px; letter-spacing: .5px; }\n .brandline .maker { color: #9AA6BC; font-weight: 600; font-size: 14px; }\n footer .brand { font-weight: 700; }\n h1 { font-size: 26px; margin: 0 0 4px; }\n .sub { color: #9AA6BC; font-size: 14px; margin: 0 0 6px; }\n .safe { color: #3ECF8E; font-size: 13px; margin: 0 0 28px; }\n /* what moved since the last check - the page's own dim, no new colour */\n .since { color: #E7ECF4; font-size: 14px; margin: 0 0 10px; unicode-bidi: plaintext; }\n /* what a dead disk would cost, in the page's own amber, no new colour */\n .radius { color: #E8B23D; font-size: 14.5px; font-weight: 600; margin: 0 0 18px; unicode-bidi: plaintext; }\n h2 { font-size: 17px; margin: 30px 0 12px; padding-bottom: 8px; border-bottom: 1px solid rgba(148,163,214,.2); }\n .f { background: #0F1420; border: 1px solid rgba(148,163,214,.14); border-radius: 12px; padding: 14px 16px; margin: 0 0 10px; }\n h3 { font-size: 15px; margin: 0 0 6px; }\n .why { color: #9AA6BC; font-size: 13.5px; margin: 0 0 8px; }\n .lbl { color: #5C6880; font-size: 12px; text-transform: uppercase; letter-spacing: .1em; margin: 0 0 4px; }\n ul { margin: 0; padding-inline-start: 20px; } li { font-size: 13.5px; margin: 2px 0; }\n /* the estate is English inside an Arabic page: isolated, never reordered */\n h3, .fact, li, .why { unicode-bidi: plaintext; }\n .wkrow .cat { unicode-bidi: isolate; direction: ltr; }\n .brand { direction: ltr; unicode-bidi: isolate; display: inline-block; }\n .empty { color: #9AA6BC; }\n /* one fact per row: category, fact, why, and the depth behind Details */\n .wk { border: 1px solid rgba(148,163,214,.14); border-radius: 12px; overflow: hidden; }\n .wkrow { display: flex; align-items: baseline; gap: 12px; padding: 10px 14px; background: #0F1420; flex-wrap: wrap; }\n .wkrow + .wkrow { border-top: 1px solid rgba(148,163,214,.14); }\n .wkrow .cat { font: 500 11px ui-monospace, Consolas, monospace; letter-spacing: .12em; text-transform: uppercase; color: #8FB8FF; width: 96px; flex-shrink: 0; }\n .wkrow .fact { font-size: 13.5px; flex: 1 1 260px; min-width: 0; }\n .wkrow .why { color: #5C6880; font-size: 12.5px; }\n .wkrow details { flex-basis: 100%; margin-top: 6px; }\n .wkrow summary { cursor: pointer; color: #9AA6BC; font-size: 12.5px; }\n footer { margin-top: 32px; color: #5C6880; font-size: 12.5px; border-top: 1px solid rgba(148,163,214,.14); padding-top: 14px; }\n /* printed, every disclosure is open: a PDF cannot be clicked */\n @media print { body { background: #fff; color: #141A26; } .f, .wkrow { background: #f6f8fc; } details { display: block; } details > *:not(summary) { display: revert; } }\n</style></head>\n<body><main>\n <p class=\"brandline\">").concat((0,v.pl)("#4D7FFF"),' <span class="maker">by ').concat(Z(v.rM),"</span></p>\n <h1>").concat(Z(r.title),'</h1>\n <p class="sub">').concat(Z(l)," \xb7 ").concat(s.length," need").concat(1===s.length?"s":""," attention, ").concat(i.length," worth a look</p>\n ").concat(W(a,n)?'<p class="since">'.concat(Z(W(a,n)),"</p>"):"","\n ").concat(B(e)?'<p class="radius">'.concat(Z(B(e)),"</p>"):"",'\n <p class="safe">').concat(Z(r.safe),"</p>\n ").concat(((e,t,n,a)=>{if(0===t.length)return"<h2>".concat(Z(e),'</h2><p class="empty">').concat(Z(a),"</p>");let s=t.map((e,t)=>'\n <div class="f">\n <h3>'.concat(n?"".concat(t+1,". "):"").concat(Z(e.title),"</h3>\n ").concat(e.why?'<p class="why">'.concat(Z(e.why),"</p>"):"","\n ").concat(e.fixes.length?'<p class="lbl">'.concat(Z(r.fix),"</p><ul>").concat(e.fixes.map(e=>"<li>".concat(Z(e),"</li>")).join(""),"</ul>"):"","\n </div>")).join("");return"<h2>".concat(Z(e),"</h2>").concat(s)})(r.needs,s,!0,r.noNeeds),"\n ").concat(((e,t,n)=>{if(0===t.length)return"<h2>".concat(Z(e),'</h2><p class="empty">').concat(Z(n),"</p>");let a=t.map(e=>{var t;return'\n <div class="wkrow">\n <span class="cat">'.concat(Z(null!=(t=e.cat)?t:""),'</span>\n <div class="fact">').concat(Z(e.title)).concat(e.why?'<span class="why"> - '.concat(Z(e.why),"</span>"):"","</div>\n ").concat(e.fixes.length?"<details><summary>".concat(Z(r.details),"</summary><ul>").concat(e.fixes.map(e=>"<li>".concat(Z(e),"</li>")).join(""),"</ul></details>"):"","\n </div>")}).join("");return"<h2>".concat(Z(e),'</h2><div class="wk">').concat(a,"</div>")})(r.worth,i,r.noWorth),"\n <footer>").concat(function(e,t,n){let a=String(e).indexOf(t);return -1===a?String(e):e.slice(0,a)+n+e.slice(a+t.length)}(Z(r.foot),v.qt,(0,v.pl)("#4D7FFF")),"</footer>\n</main></body></html>")}(t,i,h,p)),children:d("diag.downloadPage",o.UI.diag.downloadPage)}),(0,a.jsx)("button",{className:"btn",...(0,N.uN)(u.copyEstateReport),onClick:g,children:r?d("btn.copied",o.UI.diag.copied):d("diag.copyForAi",o.UI.diag.copyForAi)}),(0,a.jsx)("button",{className:"btn ghost grow",onClick:n,children:(0,a.jsx)(l.T,{k:"btn.close",en:o.UI.common.close})})]})]})})}let K=(0,s.createContext)(!1),Y=(0,s.createContext)(0);function G(){return(0,s.useContext)(Y),Date.now()}function J(e){let{ts:t,skewForm:n="at"}=e,i=G(),r=(0,s.useContext)(K),c=(0,l.kj)(),d="core"===n?c("shell.clockSkewCore",o.UI.shell.clockSkewCore):c("shell.clockSkew",o.UI.shell.clockSkew),u=(0,w.nW)(t,i)?d:(0,w.fF)(t,i);return(0,a.jsx)("span",{...(0,N.uN)(r?(0,w.Rq)(t):void 0),children:u})}function V(e){e?document.documentElement.removeAttribute("data-theme"):document.documentElement.setAttribute("data-theme","light")}function X(){try{return"day"!==localStorage.getItem("af360-theme")}catch(e){return!0}}function $(e){var t,n,i;let{active:r,cockpit:d,children:u}=e,[f,g]=(0,s.useState)(!1),[w,v]=(0,s.useState)(!0),[k,S]=(0,s.useState)(()=>Date.now()),U=d.attention;(0,s.useEffect)(()=>{if(new URLSearchParams(window.location.search).has("demo"))return;let e=!0;return fetch("/api/consent",{cache:"no-store"}).then(e=>e.json()).then(t=>{e&&t&&"boolean"==typeof t.accepted&&(t.accepted||"unreadable"===t.reason||window.location.replace("/welcome"))}).catch(()=>{}),()=>{e=!1}},[]),(0,s.useEffect)(()=>{let e=setInterval(()=>S(Date.now()),1e4);return()=>clearInterval(e)},[]),(0,s.useEffect)(()=>{try{let e=X();g("dev"===localStorage.getItem("af360-mode")),v(e),V(e)}catch(e){}let e=()=>{try{g("dev"===localStorage.getItem("af360-mode"))}catch(e){}},t=()=>{let e=X();v(e),V(e)};return window.addEventListener("af360-mode",e),window.addEventListener("af360-theme",t),()=>{window.removeEventListener("af360-mode",e),window.removeEventListener("af360-theme",t)}},[]);let C=(0,c.$c)(null==(t=d.cfg)?void 0:t.lang),T=(0,l.qN)(C);(0,s.useEffect)(()=>{let e=document.documentElement;e.setAttribute("lang",C),"ar"===C?e.setAttribute("data-lang","ar"):e.removeAttribute("data-lang")},[C]),(0,s.useEffect)(()=>{var e;let t=null==(e=window.chrome)?void 0:e.webview;if((null==t?void 0:t.postMessage)&&U)try{t.postMessage(JSON.stringify({state:U.state,theme:w?"night":"day"}))}catch(e){}},[null==U?void 0:U.state,w]);let[E,L]=(0,s.useState)(!1),F=e=>{g(e);try{localStorage.setItem("af360-mode",e?"dev":"simple")}catch(e){}window.dispatchEvent(new Event("af360-mode"))},R=()=>{let e=!w;v(e);try{localStorage.setItem("af360-theme",e?"night":"day")}catch(e){}V(e),window.dispatchEvent(new Event("af360-theme"))},D=!U||(0,x.yy)(U)?"idle":"INCIDENT"===U.state?"incident":"NEEDS_YOU"===U.state||"SAFETY"===U.state?"needs":"quiet",P=(null==U?void 0:U.state)==="SAFETY"?U.safety:null!=(i=null==U?void 0:U.open)?i:0,z=U&&P>0?(0,a.jsx)("span",{className:"n".concat("INCIDENT"===U.state?" bad":""),children:P}):null,M=e=>d.configFault?null:e,O={projects:d.radar?M(d.projects.length):null,sites:d.health?M(d.urls.length):null,discoveries:d.insights?M((0,A.yr)(d.insights).length):null,ahead:M((0,I.LZ)(null==(n=d.expiry)?void 0:n.items)),connections:M((0,I.RI)(d.clients,d.connectors))},H=e=>{let t=e.count?O[e.count]:null;return(0,a.jsxs)("a",{href:e.href,className:r===e.href?"on":"",children:[(0,a.jsx)(b.F,{name:e.icon})," ",(0,a.jsx)(l.T,{k:(0,c.DX)(e.href),en:e.label}),"/radar"===e.href&&(0,a.jsxs)(a.Fragment,{children:[" ",z]}),null!==t&&(0,a.jsx)("span",{className:"cnt",children:(0,a.jsx)(j.V,{n:t})})]},e.href)};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"horizon ".concat(D),"aria-hidden":!0}),(0,a.jsxs)(l.sJ.Provider,{value:C,children:[(0,a.jsxs)("div",{className:"shell",children:[(0,a.jsxs)("aside",{className:"side",children:[(0,a.jsx)(y,{cockpit:d}),(0,a.jsx)(m.o,{scanning:d.scanning}),(0,a.jsx)("nav",{className:"nav","aria-label":(0,c.tr)(C,"nav.aria",o.UI.shell.navAria),children:o.Ac.map(H)}),(0,a.jsxs)("div",{className:"siderow",children:[(0,a.jsxs)("div",{className:"modeseg",role:"group","aria-label":(0,c.tr)(C,"seg.modeAria",o.UI.shell.modeAria),children:[(0,a.jsx)("button",{className:f?"":"on","aria-pressed":!f,onClick:()=>F(!1),...(0,N.uN)(T.simpleMode),children:(0,a.jsx)(l.T,{k:"seg.simple",en:o.UI.shell.modeSimple})}),(0,a.jsx)("button",{className:f?"on":"","aria-pressed":f,onClick:()=>F(!0),...(0,N.uN)(T.devMode),children:(0,a.jsx)(l.T,{k:"seg.dev",en:o.UI.shell.modeDev})})]}),(0,a.jsxs)("div",{className:"modeseg",role:"group","aria-label":(0,c.tr)(C,"seg.themeAria",o.UI.shell.themeAria),children:[(0,a.jsx)("button",{className:w?"":"on","aria-pressed":!w,onClick:()=>{w&&R()},...(0,N.uN)(T.theme),children:(0,a.jsx)(l.T,{k:"seg.day",en:o.UI.shell.themeDay})}),(0,a.jsx)("button",{className:w?"on":"","aria-pressed":w,onClick:()=>{w||R()},...(0,N.uN)(T.theme),children:(0,a.jsx)(l.T,{k:"seg.night",en:o.UI.shell.themeNight})})]}),(0,a.jsx)("button",{className:"kbtn",type:"button",...(0,N.uN)((0,c.tr)(C,"appbar.shortcutsTip",o.UI.appbar.shortcutsTip)),onClick:()=>window.dispatchEvent(new Event(h)),children:(0,a.jsx)(l.T,{k:"appbar.shortcuts",en:o.UI.appbar.shortcuts})})]}),(0,a.jsx)("div",{className:"nav nav-pinned",children:o.Lf.map(H)}),(0,a.jsx)("div",{className:"side-foot",children:(0,a.jsxs)("div",{className:"foot",children:[(0,a.jsx)(m.Brand,{})," ",(0,a.jsx)(l.T,{k:"foot.by",en:o.UI.shell.footBy})," ",(0,a.jsx)(en,{}),(0,a.jsx)("br",{}),(0,a.jsx)(l.T,{k:"foot.line",en:o.UI.shell.footLine})]})})]}),(0,a.jsx)(Y.Provider,{value:k,children:(0,a.jsxs)(K.Provider,{value:f,children:[(0,a.jsxs)("main",{children:[(0,a.jsx)(Q,{active:r,cockpit:d,projects:O.projects,sites:O.sites,onShareReport:()=>L(!0)}),(0,a.jsx)(ee,{cockpit:d}),d.configFault?(0,a.jsx)(et,{fault:d.configFault,onRetry:()=>d.refresh(!1)}):u,(0,a.jsx)(p,{cockpit:d})]}),(0,a.jsx)(es,{cockpit:d})]})})]}),E&&(0,a.jsx)(q,{cockpit:d,onClose:()=>L(!1)}),(0,a.jsx)(N.H_,{})]})]})}function Q(e){let{active:t,cockpit:n,projects:s,sites:i,onShareReport:r}=e,d=(0,o.TX)(t),{radar:u,scanning:h}=n,p=(0,l.kj)(),m=(0,l.cO)();return(0,a.jsxs)("div",{className:"appbar","aria-label":p("appbar.aria",o.UI.appbar.aria),children:[d&&(0,a.jsx)("span",{className:"room","aria-label":p("appbar.roomAria",o.UI.appbar.roomAria),children:(0,a.jsx)(l.T,{k:(0,c.DX)(t),en:d})}),(0,a.jsxs)("div",{className:"right",children:[null!==s&&null!==i&&(0,a.jsx)("span",{className:"watching",children:p("appbar.watching",o.UI.appbar.watching(s,i))}),u&&(0,a.jsxs)("span",{className:"looked",...(0,N.uN)(m.looked),children:[(0,a.jsx)(l.T,{k:"appbar.looked",en:o.UI.radar.looked})," ",(0,a.jsx)(J,{ts:u.scannedAt})]}),(0,a.jsx)("button",{className:"b",onClick:r,...(0,N.uN)(p("radar.shareReportTip",o.UI.radar.shareReportTip)),children:(0,a.jsx)(l.T,{k:"btn.shareReport",en:o.UI.radar.shareReport})}),(0,a.jsx)("button",{className:"scan",onClick:()=>n.refresh(!0),disabled:h,...(0,N.uN)(m.scanNow),children:h?(0,a.jsx)(k.hI,{children:p("appbar.scanning",o.UI.common.scanning)}):p("appbar.scan",o.UI.radar.scanNow)})]})]})}function ee(e){let{cockpit:t}=e,n=(0,l.kj)(),i=t.configRecovered,r=(0,s.useRef)(null),[c,d]=(0,s.useState)(!1);return((0,s.useEffect)(()=>{if(!i)return;let e="".concat(i.path,"|").concat(i.reason);r.current!==e&&(r.current=e,d(!0))},[i]),c&&i)?(0,a.jsx)("p",{className:"banner",role:"status",children:n("fault.recovered",o.UI.configFault.recovered)}):null}function et(e){let{fault:t,onRetry:n}=e,s=(0,l.kj)();return(0,l.cO)(),(0,a.jsxs)("div",{className:"empty",children:[(0,a.jsx)("p",{className:"invite",children:(0,a.jsx)(l.T,{k:"fault.invite",en:o.UI.configFault.invite})}),(0,a.jsx)("p",{children:(0,a.jsx)(l.T,{k:"fault.line",en:o.UI.configFault.line})}),(0,a.jsx)("p",{className:"meta",children:(0,a.jsx)(l.T,{k:"fault.whereLabel",en:o.UI.configFault.whereLabel})}),(0,a.jsx)("p",{className:"path",children:(0,a.jsx)(j.B,{mono:!0,children:t.path})}),(0,a.jsx)("p",{className:"error-line",children:(0,a.jsx)(j.B,{children:t.reason})}),(0,a.jsx)("p",{className:"meta",children:(0,a.jsx)(l.T,{k:"fault.fixLead",en:o.UI.configFault.fixLead})}),(0,a.jsx)("p",{children:(0,a.jsx)(l.T,{k:"fault.fixOpen",en:o.UI.configFault.fixOpen})}),(0,a.jsx)("p",{children:(0,a.jsx)(l.T,{k:"fault.fixRestore",en:o.UI.configFault.fixRestore})}),(0,a.jsx)("p",{children:(0,a.jsx)(l.T,{k:"fault.fixRename",en:o.UI.configFault.fixRename})}),(0,a.jsx)("button",{className:"btn primary",onClick:n,children:s("btn.retry",o.UI.configFault.retry)})]})}function en(){let e=(0,l.kj)(),[t,n]=(0,s.useState)("idle");(0,s.useEffect)(()=>{if("idle"===t)return;let e=setTimeout(()=>n("idle"),2200);return()=>clearTimeout(e)},[t]);let i=async()=>{try{await navigator.clipboard.writeText(v.pA),n("done")}catch(e){n("failed")}};return(0,a.jsx)("button",{className:"link",type:"button",...(0,N.uN)(v.pA),onClick:()=>void i(),children:"done"===t?e("btn.copied",o.UI.session.copied):"failed"===t?e("btn.copyFailed",o.UI.session.copyFailed):o.UI.shell.footBrand})}function ea(e){var t;let{coverage:n}=e,s=null!=(t=null==n?void 0:n.unreadable)?t:0,i=s>0?(0,a.jsx)(j.En,{children:" \xb7 ".concat(o.UI.shell.railLogUnreadable(s))}):null;if(!n)return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.T,{k:"rail.logUnknown",en:o.UI.shell.railLogUnknown}),i]});if("full"===n.state)return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.T,{k:"rail.log",en:o.UI.shell.railLog}),i]});if("empty"===n.state)return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.T,{k:"rail.logEmpty",en:o.UI.shell.railLogEmpty}),i]});let r=n.oldestTs;if(null===r)return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.T,{k:"rail.logUnknown",en:o.UI.shell.railLogUnknown}),i]});let c=Date.now()-r<864e5,d=c?new Date(r).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}):new Date(r).toLocaleDateString("en-US",{weekday:"long"}),u="truncated"===n.state?o.UI.shell.railLogTruncated(d):c?o.UI.shell.railLogSinceTime(d):o.UI.shell.railLogSince(d);return(0,a.jsx)(j.En,{children:u+(s>0?" \xb7 ".concat(o.UI.shell.railLogUnreadable(s)):"")})}function es(e){var t,n,i,r,c;let{cockpit:d}=e,{radar:u,urls:h,insights:p,events:m,cfg:f,attention:g,scanning:y}=d,x=(0,A.yr)(p),v=(0,l.kj)(),b=(0,l.cO)(),[I,S]=(0,s.useState)(()=>Date.now());(0,s.useEffect)(()=>{let e=setInterval(()=>S(Date.now()),1e3);return()=>clearInterval(e)},[]);let U=h.reduce((e,t)=>t.current&&(!(null==e?void 0:e.current)||t.current.ts>e.current.ts)?t:e,null),C=U?U.entry.label||function(e){try{return new URL(e).hostname}catch(t){return e}}(U.entry.url):null,T=d.configFault,E=d.watching.folders.length,L=d.missingRoots,F=g?"QUIET"===g.state?"\xb7 quiet":"INCIDENT"===g.state?"\xb7 incident":"SAFETY"===g.state?"\xb7 ".concat(g.safety," safety finding").concat(1===g.safety?"":"s"):"\xb7 ".concat(g.open," need you"):"",R=(null==U?void 0:U.current)&&!(0,w.nW)(U.current.ts,I)?Math.max(0,Math.ceil((U.current.ts+6e4-I)/1e3)):null,D=(null!=(r=null==f?void 0:f.scanIntervalHours)?r:24)*36e5,P=u&&!(0,w.nW)(u.scannedAt,I)?Math.max(0,Math.ceil((u.scannedAt+D-I)/6e4)):null,z=null==(t=d.expiry)?void 0:t.items.find(e=>"ssl"===e.kind),M=(null!=m?m:[]).filter(e=>I-e.ts<864e5),O=null!=(c=M.find(e=>"mcp"===e.kind))?c:null;return(0,a.jsxs)("aside",{className:"rail","aria-label":v("rail.live",o.UI.shell.railAria),children:[(0,a.jsxs)("h3",{children:[(0,a.jsx)("i",{})," ",(0,a.jsx)(l.T,{k:"rail.live",en:o.UI.shell.railLive})]}),(0,a.jsxs)("div",{className:"pulse",children:[T&&(0,a.jsxs)("div",{className:"pl",children:[(0,a.jsx)(l.T,{k:"rail.configFault",en:o.UI.shell.railConfigFault})," ",(0,a.jsxs)("span",{className:"dim-t",children:["\xb7 ",(0,a.jsx)(l.T,{k:"rail.configFaultSub",en:o.UI.shell.railConfigFaultSub})]})]}),!T&&y&&(0,a.jsx)("div",{className:"pl now",children:(0,a.jsx)(j.En,{children:o.UI.stream.railScan(E,h.length)})}),!T&&!y&&(null==U?void 0:U.current)&&(0,a.jsx)("div",{className:"pl now",children:(0,a.jsxs)(j.En,{children:["checking ",(0,a.jsx)(j.B,{children:C}),(0,a.jsx)(k.gy,{})," ",U.current.ok?(0,a.jsxs)("span",{className:"ok-t",children:[(0,a.jsxs)(j.B,{mono:!0,children:[U.current.ms," ms"]})," ✓"]}):(null==(n=d.health)?void 0:n.offline)?(0,a.jsx)("span",{className:"dim",children:"no answer - this machine is offline"}):(0,a.jsx)("span",{className:"bad-t",children:"down ✗"})]})}),!T&&O&&I-O.ts<12e4&&(0,a.jsx)("div",{className:"pl now",children:(0,a.jsx)(j.En,{children:O.text})}),!T&&u&&(0,a.jsx)("div",{className:"pl",children:(0,a.jsxs)(j.En,{children:["watching ",(0,a.jsx)(j.V,{n:E})," folder",1===E?"":"s"," ",(0,a.jsx)("span",{className:"dim-t",children:F})]})}),!T&&u&&(0,a.jsxs)("div",{className:"pl",children:[(0,a.jsx)(l.T,{k:"rail.swept",en:o.UI.shell.railSwept})," ",(0,a.jsxs)("span",{className:"dim-t",children:["\xb7 ",(0,a.jsx)(j.En,{children:(0,a.jsx)(J,{ts:u.scannedAt})})]})]}),!T&&p&&x.length>0&&(0,a.jsx)("div",{className:"pl",children:(0,a.jsxs)(j.En,{children:[x.length," discover",1===x.length?"y":"ies"," held"]})}),!T&&(null==(i=d.pulse)?void 0:i.visible)&&d.pulse.text&&(0,a.jsx)("div",{className:"pl",children:(0,a.jsx)(j.En,{children:d.pulse.text})}),L.map(e=>(0,a.jsxs)("div",{className:"pl",children:[(0,a.jsxs)(j.En,{children:[(0,a.jsx)(j.B,{children:function(e){var t;let n=e.split(/[\\/]/).filter(Boolean);return null!=(t=n[n.length-1])?t:e}(e)})," folder"]})," ",(0,a.jsx)("span",{className:"dim-t",children:(0,a.jsx)(l.T,{k:"rail.missing",en:o.UI.shell.railMissing})})]},e))]}),(0,a.jsxs)("div",{className:"raillog",children:[(0,a.jsxs)("h3",{children:[(0,a.jsx)(ea,{coverage:d.logCoverage}),d.logReadAt?(0,a.jsx)("span",{className:"dim-t railread",children:(0,a.jsxs)(j.En,{children:["read ",(0,a.jsx)(J,{ts:d.logReadAt})]})}):null]}),(0,a.jsx)("div",{className:"raillist",children:T?null:0===M.length?(null==u?void 0:u.scannedAt)?(0,a.jsxs)("div",{className:"pl",children:[(0,a.jsx)(j.En,{children:o.UI.stream.railWatchedNothing(new Date(u.scannedAt).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}))}),(null==g?void 0:g.state)==="QUIET"?(0,a.jsxs)("span",{className:"dim-t",children:[" \xb7 ",(0,a.jsx)(l.T,{k:"rail.quietSub",en:o.UI.shell.railQuietSub})]}):null]}):(0,a.jsxs)("div",{className:"pl",children:[(0,a.jsx)(l.T,{k:"rail.noRecord",en:o.UI.shell.railNoRecord})," ",(0,a.jsxs)("span",{className:"dim-t",children:["\xb7 ",(0,a.jsx)(l.T,{k:"rail.noRecordSub",en:o.UI.shell.railNoRecordSub})]})]}):M.map(e=>(0,a.jsx)("div",{className:"pl",children:(0,a.jsxs)(j.En,{children:[(0,a.jsx)("span",{className:"dim-t",children:(0,a.jsx)(J,{ts:e.ts})})," \xb7 ",e.text]})},e.ts+e.text))}),(0,a.jsx)("div",{className:"pl",children:(0,a.jsx)("a",{className:"dim-t raillink",href:"/log",children:(0,a.jsx)(l.T,{k:"rail.older",en:o.UI.shell.railOlder})})})]}),(0,a.jsxs)("div",{className:"next",children:[(0,a.jsx)("b",{children:(0,a.jsx)(l.T,{k:"rail.next",en:o.UI.shell.railNext})}),(0,a.jsx)("br",{}),null!==R&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.T,{k:"rail.nextSiteCheck",en:o.UI.shell.railNextSiteCheck})," \xb7 ",(0,a.jsxs)(j.B,{mono:!0,children:[R,"s"]}),(0,a.jsx)("br",{})]}),null!==P&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.T,{k:"rail.nextScan",en:o.UI.shell.railNextScan})," \xb7 ",(0,a.jsx)(j.B,{mono:!0,children:P<60?"".concat(P," min"):"".concat(Math.round(P/60),"h")}),(0,a.jsx)("br",{})]}),z&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{...(0,N.uN)(b.ssl),children:(0,a.jsx)(l.T,{k:"rail.nextSsl",en:o.UI.shell.railNextSsl})})," \xb7 ",(0,a.jsxs)(j.En,{children:["calm"===z.chip?"calm":"late",", ",(0,a.jsxs)(j.B,{mono:!0,children:[z.daysLeft,"d"]})]})]})]})]})}},7470:(e,t,n)=>{n.d(t,{I:()=>a.I,OL:()=>o,Rq:()=>s,fF:()=>a.fF,l:()=>r,lt:()=>a.lt,nW:()=>a.nW,rq:()=>i});var a=n(9178);function s(e){return new Date("number"==typeof e?e:new Date(e).getTime()).toLocaleString()}function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Date.now(),t=new Date("number"==typeof e?e:new Date(e).getTime()),n=e=>String(e).padStart(2,"0");return"".concat(t.getFullYear(),"-").concat(n(t.getMonth()+1),"-").concat(n(t.getDate()))}function r(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Date.now();return i(e)}function o(e){return new Date("number"==typeof e?e:new Date(e).getTime()).toLocaleDateString([],{month:"long",day:"numeric",year:"numeric"})}},7899:(e,t,n)=>{function a(){let e=new URLSearchParams(window.location.search).get("demo");return"empty"===e||"light"===e||"busy"===e?e:null}function s(){return[{id:"c:\\builds\\crypto-experiment",kind:"project",label:"crypto-experiment",snapshot:{uncommitted:16,hasRemote:!1},resurface:{text:"You ignored crypto-experiment at 16 unsaved changes - it's now 40. Still ignore?",current:{uncommitted:40,hasRemote:!1}}}]}n.d(t,{c:()=>a,k:()=>s})},8261:(e,t,n)=>{n.d(t,{Bx:()=>c,X2:()=>r,sx:()=>l});var a=n(5163),s=n(23),i=n(8706);function r(e,t){if(!e)return null;let n=(0,a.yy)(e);if(n)return{commits:0,files:0,projects:0,components:{unpushed:{commits:0,projects:0},unsaved:{files:0,projects:0},unbacked:{projects:0,commits:0}},unmeasured:[],empty:n,zero:!n};let r=new Map(t.map(e=>[e.path.toLowerCase(),e])),o=0,l=0,c=0,d=0,u=0,h=0,p=0,m=0,f=0,g=[];for(let t of(0,s.HU)(e)){let e="project"===t.kind?r.get(t.id):void 0;if(!e)continue;let n=!1;e.statusKnown?e.uncommitted>0&&(h+=e.uncommitted,p++,l+=e.uncommitted,n=!0):g.push({name:e.name,why:"af360 could not read ".concat(e.name,"'s working tree, so its unsaved changes are not in this number"),whyP:(0,i.ph)("radius.unmeasured.status","af360 could not read {0}'s working tree, so its unsaved changes are not in this number",e.name)}),(0,a.ze)(e)?(m++,null!==e.commitCount?(f+=e.commitCount,o+=e.commitCount,n=!0):g.push({name:e.name,why:"af360 could not count ".concat(e.name,"'s commits, so its history is not in this number"),whyP:(0,i.ph)("radius.unmeasured.commits","af360 could not count {0}'s commits, so its history is not in this number",e.name)})):null!==e.ahead?e.ahead>0&&(d+=e.ahead,u++,o+=e.ahead,n=!0):e.isGit&&e.hasRemote&&g.push({name:e.name,why:"".concat(e.name," has no upstream branch set, so af360 cannot tell which of its commits are only here"),whyP:(0,i.ph)("radius.unmeasured.upstream","{0} has no upstream branch set, so af360 cannot tell which of its commits are only here",e.name)}),n&&c++}for(let e of t)e.isGit||e.looksDownloaded||g.some(t=>t.name===e.name)||g.push({name:e.name,why:"".concat(e.name," is not in git, so af360 has no way to tell whether a copy of it exists anywhere else"),whyP:(0,i.ph)("radius.unmeasured.noGit","{0} is not in git, so af360 has no way to tell whether a copy of it exists anywhere else",e.name)});return{commits:o,files:l,projects:c,components:{unpushed:{commits:d,projects:u},unsaved:{files:h,projects:p},unbacked:{projects:m,commits:f}},unmeasured:g,empty:!1,zero:0===o&&0===l}}function o(e){return"".concat(e," project").concat(1===e?"":"s")}function l(e){var t,n;if(e.empty)return{tone:"clean",headline:(0,i.pl)("radius.empty.head","Nothing to lose yet"),under:(0,i.pl)("radius.empty.under","Point af360 at a folder and it will tell you what only exists here.")};if(e.zero){let t=e.unmeasured.length;return{tone:"clean",headline:0===t?(0,i.pl)("radius.zero.head","Work that exists only on this machine: none."):(0,i.pl)("radius.zero.headPartial","Everything af360 could check has a copy elsewhere"),under:0===t?(0,i.pl)("radius.zero.under","Every project af360 watches also exists somewhere off this machine."):(0,i.ph)("radius.zero.underPartial","Nothing af360 could measure is only on this machine - and it could not measure {0}, so this does not speak for that work.",o(t))}}let a=[];e.commits>0&&a.push((t=e.commits,"".concat(t," commit").concat(1===t?"":"s"))),e.files>0&&a.push((n=e.files,"".concat(n," file").concat(1===n?"":"s")));let s=a.join(", ");return{tone:"amber",headline:(0,i.ph)("radius.head","Work that exists only on this machine: {0} across {1}.",s,o(e.projects)),under:(0,i.pl)("radius.under","af360 found no copy of it anywhere off this machine.")}}function c(e){if(0===e.unmeasured.length)return null;let t=e.unmeasured.length;return(0,i.ph)("radius.excluded","{0} not included: af360 could not measure {1}.",o(t),1===t?e.unmeasured[0].name:"them this time")}},8706:(e,t,n)=>{n.d(t,{DJ:()=>function e(t,n){var o,l,c;let d=n(t.k);if(void 0===d)return t.en;let u=(null!=(o=t.slots)?o:[]).slice();return t.list&&(u[t.list.slot]=i(t.list.items.map(t=>e(t,n)),null!=(l=n(a.and))?l:s.and,null!=(c=n(a.comma))?c:s.comma)),r(d,u)},DR:()=>c,GS:()=>r,nn:()=>i,ph:()=>o,pl:()=>l,v1:()=>s,wo:()=>a});let a={and:"join.and",comma:"join.comma"},s={and:" and ",comma:", "};function i(e,t,n){return 0===e.length?"":1===e.length?e[0]:e.slice(0,-1).join(n)+t+e[e.length-1]}function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return e.replace(/\{(\d+)\}/g,(e,n)=>{let a=t[Number(n)];return void 0===a?e:String(a)})}function o(e,t){for(var n=arguments.length,a=Array(n>2?n-2:0),s=2;s<n;s++)a[s-2]=arguments[s];return{k:e,en:r(t,a),slots:a}}function l(e,t){return{k:e,en:t}}function c(e,t){let n=e=>e.indexOf("/")>0?e.slice(0,e.indexOf("/")):"",a=e=>e.indexOf("/")>0?e.slice(e.indexOf("/")+1):e;return new Set(e.map(n).filter(Boolean)).size<=1?e.map(a):e.map(e=>n(e)?r(t,[a(e),n(e)]):e)}},8713:(e,t,n)=>{n.d(t,{DT:()=>r,LZ:()=>s,RI:()=>o,iw:()=>i,x3:()=>a});let a=e=>e.daysLeft<=90;function s(e){return Array.isArray(e)?e.filter(a).length:null}function i(e){return Array.isArray(e)?e.filter(e=>e.installed):[]}function r(e){return Array.isArray(e)?i(e).length:null}function o(e,t){let n=r(e),a=Array.isArray(t)?(Array.isArray(t)?t.filter(e=>e.connected):[]).length:null;return null===n||null===a?null:n+a}},9129:(e,t,n)=>{n.d(t,{K:()=>r});var a=n(2115),s=n(9378),i=n(7899);function r(e){var t,n,r;let[o,l]=(0,a.useState)(null),[c,d]=(0,a.useState)(null),u=(0,i.c)(),h=!!e.attention&&!!e.radar&&!!e.expiry,p=(null!=(n=e.insights)?n:[]).filter(e=>"safety"===e.cat).map(e=>({id:e.id,label:e.verdict})),m=[...(null!=(r=null==(t=e.attention)?void 0:t.items)?r:[]).map(e=>e.id),...p.map(e=>e.id)].join("|");return(0,a.useEffect)(()=>{var t,n;if(!h)return;let a=(0,s.eY)(e.attention.items,(0,s.fL)({projects:e.projects,urls:e.urls,expiryIds:(null!=(n=null==(t=e.expiry)?void 0:t.items)?n:[]).map(e=>e.id),missingRoots:e.missingRoots,safetyIds:p.map(e=>e.id)}),Date.now(),p);d(a);let i=!0;return fetch(u?"/api/check?demo=".concat(u):"/api/check",{cache:"no-store"}).then(e=>e.json()).then(e=>{if(!i)return;let t=(null==e?void 0:e.snapshot)&&"number"==typeof e.snapshot.ts?e.snapshot:null;l((0,s.Xq)(t,a))}).catch(()=>{i&&l((0,s.Xq)(null,a))}),()=>{i=!1}},[h,m,u]),{delta:o,remember:()=>{u||e.demo||!c||fetch("/api/check",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({snapshot:c})}).catch(()=>{})}}}},9378:(e,t,n)=>{n.d(t,{Xq:()=>o,eY:()=>r,fL:()=>i,lz:()=>l});var a=n(436),s=n(8706);function i(e){var t;let n=[];for(let t of e.projects)t.remoteKnown&&t.statusKnown&&n.push(t.path.toLowerCase());for(let t of e.urls)t.current&&n.push(t.entry.id);for(let t of(n.push(...e.expiryIds),e.missingRoots))n.push("missing:".concat(t.toLowerCase()));return n.push(...null!=(t=e.safetyIds)?t:[]),n}function r(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s={};for(let t of e)t.handled||(s[t.id]=t.label);for(let e of a)s[e.id]=e.label;return{ts:n,items:s,measured:t}}function o(e,t){let n=Object.keys(t.items).length;if(!e)return{first:!0,since:null,cleared:[],appeared:[],remaining:n,unmeasured:0};let a=new Set(e.measured),s=new Set(t.measured),i=e=>{let t=e.startsWith("resurface:")?e.slice(10):e;return a.has(t)&&s.has(t)},r=[],o=[],l=0;for(let[n,a]of Object.entries(e.items))if(!(n in t.items)){if(!i(n)){l++;continue}r.push(a)}for(let[n,a]of Object.entries(t.items))if(!(n in e.items)){if(!i(n)){l++;continue}o.push(a)}return{first:!1,since:e.ts,cleared:r,appeared:o,remaining:n,unmeasured:l}}function l(e,t,n){if(e.first)return t("check.first",a.UI.check.first);let i=t(s.wo.and,s.v1.and),r=t(s.wo.comma,s.v1.comma),o=[(0,s.GS)(t("check.since",a.UI.check.since),[n])];return e.cleared.length>0&&o.push((0,s.GS)(t("check.cleared",a.UI.check.cleared),[(0,s.nn)(e.cleared,i,r)])),e.appeared.length>0&&o.push((0,s.GS)(t("check.appeared",a.UI.check.appeared),[(0,s.nn)(e.appeared,i,r)])),0===e.cleared.length&&0===e.appeared.length&&0===e.unmeasured&&o.push(t("check.unchanged",a.UI.check.unchanged)),o.push((0,s.GS)(t("check.remaining",a.UI.check.remaining),[e.remaining])),e.unmeasured>0&&o.push((0,s.GS)(t("check.unmeasured",a.UI.check.unmeasured),[e.unmeasured])),o.join(" ")}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3148],{3364:(e,a,n)=>{"use strict";n.d(a,{j:()=>i});var s=n(5155),t=n(2115),l=n(436),d=n(5310);function i(e){let{what:a,onUndo:n,className:i="tl gone"}=e,r=(0,d.kj)(),[c,o]=(0,t.useState)(!1),[h,u]=(0,t.useState)(null);return(0,s.jsxs)("div",{className:i,role:"status",children:[(0,s.jsx)("b",{children:(0,s.jsx)(d.P,{p:a})}),h&&(0,s.jsx)("span",{className:"error-line",children:h}),(0,s.jsx)("button",{className:"b2 q",disabled:c,onClick:async()=>{var e;o(!0),u(null);let a=await n();o(!1),a.ok||u(null!=(e=a.message)?e:r("common.somethingWrong",l.UI.common.somethingWrong))},children:(0,s.jsx)(d.T,{k:"common.undo",en:l.UI.common.undo})})]})}},4409:(e,a,n)=>{Promise.resolve().then(n.bind(n,9540))},9540:(e,a,n)=>{"use strict";n.r(a),n.d(a,{default:()=>y});var s=n(5155),t=n(2115),l=n(7406),d=n(639),i=n(8713),r=n(5163),c=n(7e3),o=n(6400),h=n(7470),u=n(436),m=n(5310),x=n(3034),p=n(5834),j=n(3364),g=n(8706),v=n(1551),k=n(797);let f=u.UI.ahead.kind,N={ssl:"ahead.kindSsl",domain:"ahead.kindDomain",manual:"ahead.kindManual"},b=(e,a)=>"ssl"===a?e.ssl:"domain"===a?e.domain:void 0;function y(){var e,a,n,y,U,w,S,C,T,L;let A=(0,d.x)(),{expiry:D,demo:E,attention:F}=A,[M,P]=(0,t.useState)(""),[Y,q]=(0,t.useState)(""),[z,_]=(0,t.useState)(""),[O,V]=(0,t.useState)(!1),[R,W]=(0,t.useState)(null),[J,$]=(0,t.useState)(null),B=(0,t.useRef)(null),G=(0,v.$c)(null==(e=A.cfg)?void 0:e.lang),H=(e,a)=>(0,v.tr)(G,e,a),K=(0,m.qN)(G),[Q,X]=(0,t.useState)(!1),Z=async e=>{var a;e.preventDefault(),X(!0),W(null);let n=await A.post({action:"addExpiry",name:M,date:Y,note:z,cost:O});X(!1),n.ok?(P(""),q(""),_(""),V(!1),W({ok:!0,text:H("ahead.added",u.UI.ahead.added)}),A.readExpiry()):W({ok:!1,text:null!=(a=n.message)?a:""})},[ee,ea]=(0,t.useState)([]),en=async e=>{var a;let n=await A.post({action:"removeExpiry",id:e.id});n.ok?(A.resolveRow(e.id),W(null),ea(a=>[...a,e])):W({ok:!1,text:null!=(a=n.message)?a:""})},es=async e=>{var a;let n=await A.post({action:"restoreExpiry",id:e.id,name:e.name,date:e.date,note:null!=(a=e.note)?a:"",cost:!0===e.cost,done:!0===e.done});return n.ok&&(A.unresolveRow(e.id),ea(a=>a.filter(a=>a.id!==e.id)),A.readExpiry()),n},et=async(e,a)=>{let n=await A.post({action:"editExpiry",id:e,...a});if(!n.ok){var s;return W({ok:!1,text:null!=(s=n.message)?s:""}),!1}return $(null),W({ok:!0,text:H("ahead.saved",u.UI.ahead.saved)}),A.readExpiry(),!0},el=async(e,a)=>{var n;let s=await A.post({action:"doneExpiry",id:e,done:a});s.ok?A.readExpiry():W({ok:!1,text:null!=(n=s.message)?n:""})},ed=e=>{var a;return[...(null!=(a=null==D?void 0:D.items)?a:[]).filter(e).map(e=>({i:e,gone:!1})),...ee.filter(e).map(e=>({i:e,gone:!0}))].sort((e,a)=>e.i.date.localeCompare(a.i.date))},ei=ed(i.x3),er=ed(e=>!(0,i.x3)(e)),ec=function(e){let a=[],n=new Date;for(let s of e){if(!s.firstCommit)continue;let e=new Date(s.firstCommit);if(isNaN(e.getTime()))continue;let t=new Date(e);t.setFullYear(n.getFullYear()),t.getTime()<n.getTime()-864e5&&t.setFullYear(n.getFullYear()+1);let l=t.getFullYear()-e.getFullYear();if(l<1)continue;let d=Math.max(0,Math.round((t.getTime()-n.getTime())/864e5));d>90||a.push({name:s.name,years:l,days:d,when:t.toLocaleDateString([],{month:"short",day:"numeric"}),commits:s.commitCount})}return a.sort((e,a)=>e.days-a.days)}(A.projects),eo=e=>e.map(e=>{let{i:a,gone:n}=e;return n?(0,s.jsx)(j.j,{what:(0,g.ph)("ahead.removedNamed",u.UI.ahead.removedNamed,a.name),onUndo:()=>es(a)},a.id):(0,s.jsx)(I,{i:a,...eu(a)},a.id)}),eh=function(e,a,n,s){let t=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],l=function(e,a,n){let s=new Set;for(let a of e)!a.manual&&a.name&&s.add(a.name.trim().toLowerCase());for(let e of a)e.name&&s.add(e.name.trim().toLowerCase());for(let e of n){let a=(0,c.Pm)(e.url);a&&s.add(a)}return s.delete(""),s}(a,n,t),d=[],i=new Set;for(let t of[...(null!=e?e:[]).filter(e=>!!e.dateProposal).map(e=>e.dateProposal).filter(e=>!l.has(e.host)),...function(e,a,n){let s=new Set(a.map(e=>e.name.trim().toLowerCase())),t=new Map(n.map(e=>[e.host,e])),l=[];for(let a of e){var d;let e;if("ssl"!==a.kind||!1!==a.managed)continue;let n=a.name.toLowerCase();if(s.has(n))continue;let i="cert:".concat(null!=(d=a.serial)?d:a.date),r=t.get(n);if(r){if(r.citation===i)continue;e={before:r.citation,after:i}}l.push({host:n,name:a.name,date:a.date,project:a.name,file:"certificate",line:0,citation:i,changed:e})}return l}(a,n,s)])i.has(t.host)||(i.add(t.host),d.push(t));return d}(A.insights,null!=(w=null==D?void 0:D.items)?w:[],null!=(S=null==(a=A.cfg)?void 0:a.manualExpiries)?S:[],null!=(C=null==(n=A.cfg)?void 0:n.declinedDates)?C:[],null!=(T=null==(y=A.cfg)?void 0:y.urls)?T:[]),eu=e=>!e.manual||(null==D?void 0:D.demo)?{}:{onRemove:en,onEdit:()=>$(e.id),onDone:el,editing:J===e.id,onCancel:()=>$(null),onSave:et},em=null!=(L=null==F?void 0:F.items.filter(e=>"expiry"===e.kind&&!e.handled).length)?L:0;return(0,s.jsxs)(l.Ay,{active:"/ahead",cockpit:A,children:[(0,s.jsxs)("div",{className:"pagebar",children:[(0,s.jsx)("h1",{children:(0,s.jsx)(m.T,{k:"room.ahead",en:u.UI.ahead.title})}),(0,s.jsx)("span",{className:"purpose",children:(0,s.jsx)(m.T,{k:"ahead.purpose",en:u.UI.ahead.purpose})}),F&&(em>0?(0,s.jsxs)("span",{className:"statuspill",children:[(0,s.jsx)("i",{}),em," need",1===em?"s":""," a decision"]}):(0,r.yy)(F)?(0,s.jsxs)("span",{className:"statuspill idle",children:[(0,s.jsx)("i",{}),H("ahead.nothingWatched",u.UI.ahead.nothingWatched)]}):(0,s.jsxs)("span",{className:"statuspill ok",children:[(0,s.jsx)("i",{}),H("ahead.nothingToDo",u.UI.ahead.nothingToDo)]}))]}),E&&(0,s.jsxs)("p",{className:"banner",children:[H("banner.aheadLead",u.UI.ahead.bannerLead)," ",(0,s.jsx)("a",{className:"link",href:"/radar",children:H("banner.aheadLink",u.UI.ahead.bannerLink)})," ",H("banner.aheadTail",u.UI.ahead.bannerTail)]}),(null==(U=A.pulse)?void 0:U.visible)&&A.pulse.text&&(0,s.jsxs)("div",{className:"tl",children:[(0,s.jsx)("span",{className:"chip info",children:"week"}),(0,s.jsx)("b",{children:A.pulse.text.replace(/^Your week: /,"")}),(0,s.jsx)("span",{className:"judg",children:H("ahead.weekJudg",u.UI.ahead.weekJudg)})]}),(0,s.jsxs)("div",{className:"sec",children:[(0,s.jsx)("h2",{children:(0,s.jsx)(m.T,{k:"sec.next90",en:u.UI.ahead.next90})}),(0,s.jsx)("span",{className:"meta",children:(0,s.jsx)(x.V,{n:ei.filter(e=>!e.gone).length})})]}),D?0===ei.length?(0,s.jsxs)("div",{className:"empty",children:[(0,s.jsx)("p",{className:"invite",children:H("ahead.emptyInvite",u.UI.ahead.emptyInvite)}),(0,s.jsx)("p",{children:H("ahead.emptyLine",u.UI.ahead.emptyLine)})]}):eo(ei):(0,s.jsx)("p",{className:"loading",children:(0,s.jsx)(p.hI,{children:H("ahead.reading",u.UI.ahead.reading)})}),er.length>0&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"sec",children:[(0,s.jsx)("h2",{children:(0,s.jsx)(m.T,{k:"sec.further",en:u.UI.ahead.further})}),(0,s.jsx)("span",{className:"meta",children:(0,s.jsx)(x.V,{n:er.filter(e=>!e.gone).length})})]}),eo(er)]}),ec.length>0&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"sec",children:[(0,s.jsx)("h2",{children:(0,s.jsx)(m.T,{k:"sec.anniversaries",en:u.UI.ahead.anniversaries})}),(0,s.jsxs)("span",{className:"meta",children:[(0,s.jsx)(x.V,{n:ec.length})," \xb7 ",H("ahead.anniversariesMeta",u.UI.ahead.anniversariesMeta)]})]}),ec.map(e=>(0,s.jsxs)("div",{className:"tl",children:[(0,s.jsxs)("span",{className:"chip info",children:[e.days,"d"]}),(0,s.jsx)("b",{children:e.name}),(0,s.jsx)("span",{className:"what",children:1===e.years?"turns 1":"turns ".concat(e.years," years old")}),(0,s.jsx)("span",{className:"judg",children:null!=e.commits?"".concat(e.commits," commits since the first"):"its first birthday"}),(0,s.jsx)("span",{className:"when",children:e.when})]},e.name+e.when))]}),D&&D.unknowns.length>0&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"sec",children:[(0,s.jsx)("h2",{children:(0,s.jsx)(m.T,{k:"sec.undetermined",en:u.UI.ahead.undetermined})}),(0,s.jsx)("span",{className:"meta",children:(0,s.jsx)(x.V,{n:D.unknowns.length})})]}),D.unknowns.map((e,a)=>{var n;return(0,s.jsxs)("div",{className:"tl",children:[(0,s.jsx)("span",{className:"chip plain",children:"?"}),(0,s.jsx)("b",{children:e.name}),(0,s.jsx)("span",{className:"what",...(0,k.uN)(b(K,e.kind)),children:H(null!=(n=N[e.kind])?n:"",f[e.kind])}),(0,s.jsxs)("span",{className:"judg",children:["unknown - ",e.reason,"; af360 never guesses dates"]})]},a)})]}),(0,s.jsx)(o.k4,{cockpit:A,offers:eh,onTrack:e=>{var a;P(e.name),q(e.date?(0,h.rq)(e.date):""),_(""),V(!1),W(null),null==(a=B.current)||a.scrollIntoView({block:"nearest"})}}),(0,s.jsx)("div",{className:"sec",children:(0,s.jsx)("h2",{children:(0,s.jsx)(m.T,{k:"sec.addYourOwn",en:u.UI.ahead.addYourOwn})})}),(0,s.jsxs)("form",{className:"addrow",ref:B,onSubmit:Z,children:[(0,s.jsx)("input",{className:"in",style:{inlineSize:200},placeholder:H("ahead.namePlaceholder",u.UI.ahead.namePlaceholder),value:M,onChange:e=>P(e.target.value),"aria-label":H("ahead.nameAria",u.UI.ahead.nameAria)}),(0,s.jsx)("input",{className:"in",type:"date",style:{inlineSize:150},value:Y,onChange:e=>q(e.target.value),"aria-label":H("ahead.dateAria",u.UI.ahead.dateAria)}),(0,s.jsx)("input",{className:"in",style:{flex:1,maxInlineSize:220},placeholder:H("ahead.notePlaceholder",u.UI.ahead.notePlaceholder),value:z,onChange:e=>_(e.target.value),"aria-label":H("ahead.noteAria",u.UI.ahead.noteAria)}),(0,s.jsxs)("label",{className:"costbox",children:[(0,s.jsx)("input",{type:"checkbox",checked:O,onChange:e=>V(e.target.checked),"aria-label":H("ahead.costAria",u.UI.ahead.costAria)}),(0,s.jsx)("span",{children:H("ahead.costLabel",u.UI.ahead.costLabel)})]}),(0,s.jsx)("button",{className:"scan",type:"submit",disabled:Q,children:Q?H("ahead.adding",u.UI.ahead.adding):H("ahead.add",u.UI.ahead.add)})]}),R&&(0,s.jsx)("p",{className:R.ok?"ok-line":"error-line",children:R.text})]})}function I(e){var a,n,d,i;let{i:r,onRemove:c,onEdit:o,onDone:h,editing:x,onCancel:p,onSave:j}=e,g=(0,t.useContext)(l.vC),v=(0,m.kj)(),y=(0,m.cO)(),I="calm"===r.chip?"calm":"amber"===r.chip?"warn":"bad",w="manual"===r.kind?r.note?'"'.concat(r.note,'"'):"":null!=(a=r.judgment)?a:"";return x&&j&&p?(0,s.jsx)(U,{i:r,onSave:j,onCancel:p}):(0,s.jsxs)("div",{className:"tl".concat(r.done?" handled":""),children:[(0,s.jsx)("span",{className:"chip ".concat(I),children:r.manual&&r.daysLeft<0?v("ahead.passed",u.UI.ahead.passed):function(e){let a=e.daysLeft;return a<0?"".concat(-a,"d late"):0===a?"today":a<=120?"".concat(a,"d"):"".concat(Math.round(a/30),"mo")}(r)}),(0,s.jsx)("b",{children:r.name}),(0,s.jsx)("span",{className:"what",...(0,k.uN)(b(y,r.kind)),children:v(null!=(n=N[r.kind])?n:"",f[r.kind])}),r.manual&&(0,s.jsx)("span",{className:"chip plain",children:(0,s.jsx)(m.T,{k:"ahead.yours",en:u.UI.ahead.yours})}),r.manual&&r.cost&&(0,s.jsx)("span",{className:"chip plain",children:(0,s.jsx)(m.T,{k:"ahead.costTag",en:u.UI.ahead.costTag})}),w&&(0,s.jsx)("span",{className:"judg",children:w}),r.done&&(0,s.jsx)("span",{className:"judg",children:(0,s.jsx)(m.T,{k:"ahead.doneMeta",en:u.UI.ahead.doneMeta})}),g&&(0,s.jsxs)("span",{className:"judg mono",children:["ssl"===r.kind&&(0,s.jsxs)(s.Fragment,{children:["issuer ",null!=(d=r.issuer)?d:"unknown",r.serial?" \xb7 ".concat(r.serial):""," \xb7 "]}),r.manual&&(0,s.jsxs)(s.Fragment,{children:["rung ",null!=(i=r.rung)?i:"none"," \xb7 "]}),"exact ",new Date(r.date).toLocaleString()]}),(0,s.jsx)("span",{className:"when",children:function(e,a){let n=new Date(e);return a<=365?n.toLocaleDateString([],{month:"short",day:"numeric"}):n.toLocaleDateString([],{month:"short",year:"numeric"})}(r.date,r.daysLeft)}),r.passed&&!r.done&&(0,s.jsx)("span",{className:"judg",children:(0,s.jsx)(m.T,{k:"ahead.passedLine",en:u.UI.ahead.passedLine})}),h&&(0,s.jsx)("button",{className:"b2 q",onClick:()=>h(r.id,!r.done),children:r.done?v("ahead.undone",u.UI.ahead.undone):v("ahead.done",u.UI.ahead.done)}),o&&(0,s.jsx)("button",{className:"b2 q",...(0,k.uN)(y.editEntry),onClick:o,children:r.passed&&!r.done?v("ahead.reDate",u.UI.ahead.reDate):v("ahead.edit",u.UI.ahead.edit)}),c&&(0,s.jsx)("button",{className:"b2 q danger",onClick:()=>c(r),children:(0,s.jsx)(m.T,{k:"btn.remove",en:u.UI.common.remove})})]})}function U(e){var a;let{i:n,onSave:l,onCancel:d}=e,i=(0,m.kj)(),[r,c]=(0,t.useState)(n.name),[o,x]=(0,t.useState)((0,h.rq)(n.date)),[p,j]=(0,t.useState)(null!=(a=n.note)?a:""),[g,v]=(0,t.useState)(!0===n.cost),[k,f]=(0,t.useState)(!1);return(0,s.jsxs)("form",{className:"tl addrow",onSubmit:async e=>{e.preventDefault(),f(!0),await l(n.id,{name:r,date:o,note:p,cost:g}),f(!1)},children:[(0,s.jsx)("input",{className:"in",style:{inlineSize:200},value:r,onChange:e=>c(e.target.value),"aria-label":i("ahead.nameAria",u.UI.ahead.nameAria)}),(0,s.jsx)("input",{className:"in",type:"date",style:{inlineSize:150},value:o,onChange:e=>x(e.target.value),"aria-label":i("ahead.dateAria",u.UI.ahead.dateAria)}),(0,s.jsx)("input",{className:"in",style:{flex:1,maxInlineSize:220},value:p,onChange:e=>j(e.target.value),"aria-label":i("ahead.noteAria",u.UI.ahead.noteAria)}),(0,s.jsxs)("label",{className:"costbox",children:[(0,s.jsx)("input",{type:"checkbox",checked:g,onChange:e=>v(e.target.checked),"aria-label":i("ahead.costAria",u.UI.ahead.costAria)}),(0,s.jsx)("span",{children:i("ahead.costLabel",u.UI.ahead.costLabel)})]}),(0,s.jsx)("button",{className:"scan",type:"submit",disabled:k,children:i("ahead.save",u.UI.ahead.save)}),(0,s.jsx)("button",{className:"b2 q",type:"button",onClick:d,children:i("ahead.cancel",u.UI.ahead.cancel)})]})}}},e=>{e.O(0,[3192,8050,8441,1255,7358],()=>e(e.s=4409)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7572],{148:(n,e,c)=>{"use strict";c.r(e),c.d(e,{default:()=>g});var s=c(5155),t=c(7406),o=c(2115),i=c(8713),a=c(436),l=c(5310),r=c(3034),d=c(8706),u=c(2613);function p(n){let{lang:e,t:c,clients:t,supported:p,remembered:m,reload:x}=n,[j,f]=(0,o.useState)(null),[v,g]=(0,o.useState)(null),[b,N]=(0,o.useState)(null),k=async(n,e)=>{g(n),N(null),f(null);let c=await fetch("/api/connections",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"connect"===e?"preview":"previewDisconnect",clientId:n})}).then(n=>n.json()).catch(()=>null);g(null),c&&(c.ok&&c.receipt?f({receipt:c.receipt}):c.refusal&&f({refusal:c.refusal}))},I=async n=>{g(n.clientId);let e=await fetch("/api/connections",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:n.action,clientId:n.clientId,digest:n.digest})}).then(n=>n.json()).catch(()=>null);if(g(null),e)if(e.ok){var c;f(null),N({label:n.label,action:n.action,backup:null!=(c=e.backupPath)?c:null}),x()}else e.refusal&&f({refusal:e.refusal})};if(null===t)return(0,s.jsx)("div",{className:"kit-card",children:(0,s.jsx)("div",{className:"lbl",children:(0,s.jsx)("span",{children:(0,s.jsx)(l.T,{k:"conn.looking",en:a.UI.settings.connLooking})})})});let U=(0,i.iw)(t),w=p.filter(n=>!U.some(e=>e.id===n.id)),y=(0,d.nn)(w.map(n=>n.label),d.v1.and,d.v1.comma);return(0,s.jsx)("div",{className:"kit-card",children:(0,s.jsxs)("div",{className:"lbl",children:[0===U.length?(0,s.jsx)("span",{children:c("conn.none",a.UI.settings.connNone)}):(0,s.jsxs)("div",{className:"rule-list",children:[U.map(n=>{let e="malformed"===n.state||"unreadable"===n.state,t=!n.connected&&!e&&!1!==n.verified&&!!n.elsewhere,o=!n.connected&&!e&&!1===n.verified,i=!n.connected&&!e&&!1!==n.verified&&!!n.oldShape,d=!n.connected&&!e&&!t&&!o&&!i&&m.includes(n.id);return(0,s.jsxs)("div",{className:"rule-row conn-row",children:[(0,s.jsxs)("span",{className:"conn-name",children:[n.label,n.connected?(0,s.jsx)("em",{className:"conn-on",children:c("conn.connected",a.UI.settings.connConnected)}):e?(0,s.jsx)("em",{className:"conn-fault",children:c("conn.unreadable",a.UI.settings.connUnreadable)}):t?(0,s.jsx)("em",{className:"conn-fault",children:c("conn.elsewhere",a.UI.settings.connElsewhere)}):i?(0,s.jsx)("em",{className:"conn-fault",children:c("conn.oldShape",a.UI.settings.connOldShape)}):o?(0,s.jsx)("em",{className:"conn-fault",children:c("conn.unverified",a.UI.settings.connUnverified)}):(0,s.jsx)("em",{className:"conn-off",children:c("conn.notConnected",a.UI.settings.connNotConnected)})]}),(0,s.jsx)("span",{className:"conn-path",children:(0,s.jsx)(r.B,{children:n.configPath})}),n.connected?(0,s.jsx)(u.ob,{actions:[{label:c("conn.disconnect",a.UI.settings.connDisconnect),onClick:()=>k(n.id,"disconnect"),danger:!0}]}):(0,s.jsx)("button",{className:"b2 q",disabled:v===n.id,onClick:()=>k(n.id,"connect"),children:d||i?c("conn.reconnect",a.UI.settings.connReconnect):"".concat(c("conn.connect",a.UI.settings.connConnect)," ").concat(n.label)}),d&&(0,s.jsx)("span",{className:"conn-dropped",children:c("conn.dropped",a.UI.settings.connDropped).replace("{0}",n.label)}),t&&(0,s.jsx)("span",{className:"conn-dropped",children:(0,s.jsx)(r.B,{children:n.elsewhere})}),i&&n.entryCommand&&(0,s.jsx)("span",{className:"conn-dropped",children:(0,s.jsx)(r.B,{children:n.entryCommand})}),o&&n.reason&&(0,s.jsx)("span",{className:"conn-dropped",children:n.reason}),j&&"receipt"in j&&j.receipt.clientId===n.id&&(0,s.jsx)(h,{r:j.receipt,t:c,busy:v===j.receipt.clientId,onConfirm:()=>I(j.receipt),onCancel:()=>f(null)}),j&&"refusal"in j&&j.refusal.clientId===n.id&&(0,s.jsxs)("div",{className:"conn-diff conn-refused",children:[(0,s.jsx)("b",{children:c("conn.refused",a.UI.settings.connRefused)}),(0,s.jsx)("span",{className:"error-line",children:j.refusal.reason}),j.refusal.configPath&&(0,s.jsx)("span",{className:"conn-path",children:(0,s.jsx)(r.B,{children:j.refusal.configPath})}),(0,s.jsx)("div",{className:"setup-actions",style:{justifyContent:"flex-start",marginBlockStart:8},children:(0,s.jsx)("button",{className:"b2 q",onClick:()=>f(null),children:(0,s.jsx)(l.T,{k:"btn.done",en:a.UI.common.done})})})]})]},n.id)}),w.length>0&&(0,s.jsx)("span",{className:"conn-also",children:c("conn.alsoWorks",a.UI.settings.connAlsoWorks).replace("{0}",y)})]}),j&&"refusal"in j&&!U.some(n=>n.id===j.refusal.clientId)&&(0,s.jsxs)("div",{className:"conn-diff conn-refused",children:[(0,s.jsx)("b",{children:c("conn.refused",a.UI.settings.connRefused)}),(0,s.jsx)("span",{className:"error-line",children:j.refusal.reason}),j.refusal.configPath&&(0,s.jsx)("span",{className:"conn-path",children:(0,s.jsx)(r.B,{children:j.refusal.configPath})}),(0,s.jsx)("div",{className:"setup-actions",style:{justifyContent:"flex-start",marginBlockStart:8},children:(0,s.jsx)("button",{className:"b2 q",onClick:()=>f(null),children:(0,s.jsx)(l.T,{k:"btn.done",en:a.UI.common.done})})})]}),b&&(0,s.jsxs)("span",{className:"conn-done",children:[("connect"===b.action?c("conn.wrote",a.UI.settings.connWrote):c("conn.removed",a.UI.settings.connRemoved)).replace("{0}",b.label),b.backup?" ".concat(c("conn.backupAt",a.UI.settings.connBackupAt).replace("{0}",b.backup)):"","connect"===b.action&&(0,s.jsx)("b",{className:"conn-step",children:c("conn.restart",a.UI.settings.connRestart).replace("{0}",b.label)})]})]})})}function h(n){let{r:e,t:c,busy:t,onConfirm:o,onCancel:i}=n;return(0,s.jsxs)("div",{className:"conn-diff",children:[(0,s.jsx)("b",{children:("connect"!==e.action?c("conn.willRemove",a.UI.settings.connWillRemove):"repoint"===e.kind?c("conn.willRepoint",a.UI.settings.connWillRepoint):c("conn.willWrite",a.UI.settings.connWillWrite)).replace("{0}",e.label)}),(0,s.jsx)("span",{className:"conn-path",children:(0,s.jsx)(r.B,{children:e.configPath})}),(0,s.jsx)("span",{className:"conn-count",children:c("conn.lineCount",a.UI.settings.connLineCount).replace("{0}",String(e.added)).replace("{1}",String(e.removed)).replace("{2}",String(e.startLine))}),(0,s.jsx)("pre",{className:"conn-lines",dir:"ltr",children:e.lines.map((n,e)=>(0,s.jsxs)("span",{className:"+"===n.sign?"dl-add":"-"===n.sign?"dl-del":"dl-ctx",children:[n.sign,n.text,"\n"]},e))}),e.willBackupTo&&(0,s.jsx)("span",{className:"conn-backup",children:c("conn.willBackup",a.UI.settings.connWillBackup).replace("{0}",e.willBackupTo)}),e.running&&(0,s.jsx)("span",{className:"conn-warn",children:c("conn.running",a.UI.settings.connRunning).replace("{0}",e.label)}),(0,s.jsxs)("div",{className:"setup-actions",style:{justifyContent:"flex-start",marginBlockStart:8},children:[(0,s.jsx)("button",{className:"b".concat("connect"===e.action?"":" danger"),disabled:t,onClick:o,children:"connect"===e.action?c("conn.confirmWrite",a.UI.settings.connConfirmWrite):c("conn.confirmRemove",a.UI.settings.connConfirmRemove)}),(0,s.jsx)("button",{className:"b2 q",disabled:t,onClick:i,children:(0,s.jsx)(l.T,{k:"btn.cancel",en:a.UI.common.cancel})})]})]})}function m(n){var e,c,i,d,u,p,h,m,f;let{t:v,state:g,appReady:b,reload:N,onCount:k}=n,[I,U]=(0,o.useState)(!1),[w,y]=(0,o.useState)(null),[C,T]=(0,o.useState)(null),[S,E]=(0,o.useState)(null),[A,L]=(0,o.useState)(!1),[R,O]=(0,o.useState)(()=>Date.now()),[B,W]=(0,o.useState)(null),[H,P]=(0,o.useState)(!1),[M,F]=(0,o.useState)(!1),[q,D]=(0,o.useState)(null),[G,_]=(0,o.useState)(!1);(0,o.useEffect)(()=>{if(!H)return;let n=!1,e=async()=>{var e,c;let s=await fetch("/api/connectors/github",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"status",flowId:B})}).then(n=>n.json()).catch(()=>null);if(!n&&(null==s?void 0:s.ok)){if("idle"===s.phase){V(),U(!1),D({kind:"unreached",reason:"af360 is no longer waiting for GitHub's answer, and nothing was stored - press Connect GitHub to start again."});return}"done"===s.phase&&(V(),U(!1),N(),"ok"===s.outcome?D({kind:"ok",login:s.login,repoNames:Array.isArray(s.repoNames)?s.repoNames:[],reposUnread:Number(s.reposUnread)||0,installationCount:"number"==typeof s.installationCount?s.installationCount:void 0}):"refused-write"===s.outcome?D({kind:"refused-write",detail:String(null!=(e=s.detail)?e:"")}):D({kind:"unreached",reason:String(null!=(c=s.reason)?c:"The authorization did not complete.")}))}},c=setInterval(()=>{e()},1500);return()=>{n=!0,clearInterval(c)}},[H,B]);let J=async()=>{if(M)return;F(!0),D(null);let n=await fetch("/api/connectors/github",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"begin"})}).then(n=>n.json()).catch(()=>null);if(F(!1),!(null==n?void 0:n.ok)){var e;D({kind:"error",message:String(null!=(e=null==n?void 0:n.message)?e:"af360 could not start the authorization.")});return}y("string"==typeof n.userCode?n.userCode:null),T("string"==typeof n.verificationUri?n.verificationUri:null),E("number"==typeof n.expiresAt?n.expiresAt:null),L(!1),O(Date.now()),W("string"==typeof n.flowId?n.flowId:null),P(!0)},V=(0,o.useCallback)(()=>{P(!1),W(null),y(null),T(null),E(null),L(!1)},[]),z=()=>{if(I){U(!1),K();return}U(!0),D(null),w||J()},K=async()=>{V(),await fetch("/api/connectors/github",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"cancel"})}).catch(()=>{})};(0,o.useEffect)(()=>{if(!S)return;let n=setInterval(()=>O(Date.now()),1e3);return()=>clearInterval(n)},[S]);let $=async()=>{if(w)try{await navigator.clipboard.writeText(w),L(!0),setTimeout(()=>L(!1),2e3)}catch(n){}},Q=async()=>{F(!0),D(null);let n=await fetch("/api/connectors/github",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"disconnect"})}).then(n=>n.json()).catch(()=>null);F(!1),(null==n?void 0:n.ok)&&(N(),D({kind:"disconnected"}))};return((0,o.useEffect)(()=>{null!==g&&(null==k||k(1))},[g,k]),null===g)?(0,s.jsx)("div",{className:"kit-card",children:(0,s.jsx)("div",{className:"lbl",children:(0,s.jsx)("span",{children:(0,s.jsx)(l.T,{k:"conn.looking",en:a.UI.settings.connLooking})})})}):(0,s.jsx)("div",{className:"kit-card".concat(g.connected?"":" needs-row"),children:(0,s.jsxs)("div",{className:"lbl",children:[(0,s.jsx)("div",{className:"rule-list",children:(0,s.jsxs)("div",{className:"rule-row conn-row",children:[(0,s.jsxs)("span",{className:"conn-name",children:[(0,s.jsx)(l.T,{k:"connections.githubName",en:a.UI.connections.githubName}),g.connected&&g.unreadable?(0,s.jsx)("em",{className:"conn-fault",children:v("connections.githubUnreadable",a.UI.connections.githubUnreadable)}):g.connected&&g.refusal&&!b?(0,s.jsx)("em",{className:"conn-fault",children:v("conn.githubStale",a.UI.settings.connGitHubStale)}):g.connected&&g.refusal?(0,s.jsx)("em",{className:"conn-fault",children:v("conn.githubRefused",a.UI.settings.connGitHubRefused)}):g.connected&&g.verified?(0,s.jsx)("em",{className:"conn-on",children:v("conn.connected",a.UI.settings.connConnected)}):g.connected?(0,s.jsx)("em",{className:"conn-idle",children:v("connections.ghCardNever",a.UI.connections.ghCardNever)}):(0,s.jsx)("em",{className:"conn-off",children:v("conn.notConnected",a.UI.settings.connNotConnected)})]}),g.connected&&g.refusal?(0,s.jsx)("span",{className:"conn-path",children:(0,s.jsx)(r.En,{children:b?v("connections.refusedLine",a.UI.connections.refusedLine).replace("{0}",null!=(d=g.login)?d:""):v("connections.staleNoAppLine",a.UI.connections.staleNoAppLine).replace("{0}",null!=(i=g.login)?i:"")})}):g.connected&&g.unreadable?null:g.connected?(0,s.jsxs)("span",{className:"conn-path",children:[(0,s.jsx)(r.En,{children:v("connections.verifiedAs",a.UI.connections.verifiedAs).replace("{0}",null!=(u=g.login)?u:"")})," \xb7 ",(0,s.jsx)(r.En,{children:v("connections.connectedMeta",a.UI.connections.connectedMeta).replace("{0}",function(n,e,c){let s=1===e?n("connections.repoCountOne",a.UI.connections.repoCountOne):n("connections.repoCountMany",a.UI.connections.repoCountMany).replace("{0}",String(e));return!0===c?s:n("connections.repoCountFloor",a.UI.connections.repoCountFloor).replace("{0}",s)}(v,null!=(p=g.repoCount)?p:0,g.reposKnown))})," ",g.connectedAt?(0,s.jsx)(r.En,{children:(0,s.jsx)(t.fV,{ts:g.connectedAt})}):null,(null!=(h=null==(e=g.repoNames)?void 0:e.length)?h:0)>0&&(0,s.jsxs)(s.Fragment,{children:[" \xb7 ",(0,s.jsx)("button",{className:"conn-reveal","aria-expanded":G,onClick:()=>_(n=>!n),children:G?v("connections.grantedHide",a.UI.connections.grantedHide):v("connections.grantedShow",a.UI.connections.grantedShow)})]})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"conn-path",children:(0,s.jsx)(l.T,{k:"connections.githubOffer",en:a.UI.connections.githubOffer})}),(0,s.jsx)("span",{className:"conn-path",children:(0,s.jsx)(l.T,{k:"connections.githubBlind",en:a.UI.connections.githubBlind})})]}),g.connected&&G&&(null!=(m=null==(c=g.repoNames)?void 0:c.length)?m:0)>0&&(0,s.jsxs)("div",{className:"conn-granted",children:[(0,s.jsx)(r.En,{children:(function(n){let e=new Map;for(let s of n){var c;let n=s.indexOf("/"),t=n>0?s.slice(0,n):"",o=n>0?s.slice(n+1):s;(null!=(c=e.get(t))?c:e.set(t,[]).get(t)).push(o)}return[...e.entries()]})(null!=(f=g.repoNames)?f:[]).map(n=>{let[e,c]=n;return(0,s.jsxs)("div",{className:"conn-acct",children:[(0,s.jsx)("span",{className:"conn-acct-name",children:e?v("connections.grantedAccount",a.UI.connections.grantedAccount).replace("{0}",e):null}),(0,s.jsx)("ul",{children:c.map(n=>(0,s.jsx)("li",{children:n},n))})]},e)})}),!0!==g.reposKnown&&(0,s.jsx)("span",{className:"conn-count",children:(0,s.jsx)(l.T,{k:"connections.grantedFloor",en:a.UI.connections.grantedFloor})})]}),g.connected&&g.refusal&&b?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{className:"b2",disabled:M,onClick:()=>z(),children:v("connections.githubReconnect",a.UI.connections.githubReconnect)}),(0,s.jsx)("button",{className:"b2 q danger",disabled:M,onClick:()=>void Q(),children:v("connections.disconnect",a.UI.connections.disconnect)})]}):(0,s.jsx)("button",{className:"b2 q",disabled:M,onClick:()=>g.connected?void Q():z(),children:g.connected?v("connections.disconnect",a.UI.connections.disconnect):v("connections.githubConnect",a.UI.connections.githubConnect)})]})}),I&&(!g.connected||g.refusal)&&(0,s.jsx)(x,{t:v,appReady:b,userCode:w,verificationUri:C,expiresAt:S,now:R,copied:A,waiting:H,busy:M,onCopy:$,onCancel:K}),q&&(0,s.jsx)(j,{t:v,outcome:q})]})})}function x(n){let{t:e,appReady:c,userCode:t,verificationUri:o,expiresAt:i,now:d,copied:u,waiting:p,busy:h,onCopy:m,onCancel:x}=n,j=i?function(n,e){let c=n-e;if(c<=0)return{text:"",gone:!0};let s=Math.ceil(c/1e3);if(s<60)return{text:"".concat(s," second").concat(1===s?"":"s"),gone:!1};let t=Math.ceil(s/60);return{text:"".concat(t," minute").concat(1===t?"":"s"),gone:!1}}(i,d):null;return(0,s.jsxs)("div",{className:"conn-diff conn-setup",children:[(0,s.jsx)("b",{children:(0,s.jsx)(l.T,{k:"connections.setupTitle",en:a.UI.connections.setupTitle})}),(0,s.jsx)("span",{className:"conn-lede",children:(0,s.jsx)(l.T,{k:"connections.setupLede",en:a.UI.connections.setupLede})}),c?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"conn-touches",children:(0,s.jsx)(l.T,{k:"connections.setupTouches",en:a.UI.connections.setupTouches})}),t?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"conn-device",children:[(0,s.jsx)("span",{className:"conn-device-label",children:(0,s.jsx)(l.T,{k:"connections.deviceCodeLabel",en:a.UI.connections.deviceCodeLabel})}),(0,s.jsxs)("div",{className:"conn-device-row",children:[(0,s.jsx)("code",{className:"conn-device-code",children:t}),(0,s.jsx)("button",{className:"b2 q",onClick:m,"aria-live":"polite",children:u?e("connections.deviceCopied",a.UI.connections.deviceCopied):e("connections.deviceCopy",a.UI.connections.deviceCopy)})]}),o&&(0,s.jsxs)("div",{className:"conn-device-row",children:[(0,s.jsx)("span",{className:"conn-device-label",children:(0,s.jsx)(l.T,{k:"connections.deviceGoLabel",en:a.UI.connections.deviceGoLabel})}),(0,s.jsx)("a",{className:"b accent",href:o,target:"_blank",rel:"noreferrer noopener",children:(0,s.jsx)(r.B,{children:o})})]}),j&&(j.gone?(0,s.jsx)("span",{className:"error-line",children:e("connections.deviceExpired",a.UI.connections.deviceExpired)}):(0,s.jsx)("span",{className:"conn-device-clock",children:e("connections.deviceExpires",a.UI.connections.deviceExpires).replace("{0}",j.text)}))]}),(0,s.jsx)("div",{className:"conn-go",children:(0,s.jsx)("button",{className:"b2 q",onClick:x,children:(0,s.jsx)(l.T,{k:"connections.setupCancel",en:a.UI.connections.setupCancel})})})]}):(0,s.jsx)("div",{className:"conn-go",children:(0,s.jsx)("span",{className:"conn-waiting","aria-busy":h,children:(0,s.jsx)(l.T,{k:"connections.setupStarting",en:a.UI.connections.setupStarting})})}),p&&t&&(0,s.jsx)("span",{className:"conn-waiting",children:(0,s.jsx)(l.T,{k:"connections.setupWaiting",en:a.UI.connections.setupWaiting})})]}):(0,s.jsx)("span",{className:"error-line",children:(0,s.jsx)(l.T,{k:"connections.setupNoApp",en:a.UI.connections.setupNoApp})}),(0,s.jsxs)("div",{className:"conn-receipt",children:[(0,s.jsx)("b",{children:(0,s.jsx)(l.T,{k:"connections.receiptHead",en:a.UI.connections.receiptHead})}),(0,s.jsxs)("span",{children:["\xb7 ",(0,s.jsx)(l.T,{k:"connections.receiptStored",en:a.UI.connections.receiptStored})]}),(0,s.jsxs)("span",{children:["\xb7 ",(0,s.jsx)(l.T,{k:"connections.receiptCalls",en:a.UI.connections.receiptCalls})]}),(0,s.jsxs)("span",{children:["\xb7 ",(0,s.jsx)(l.T,{k:"connections.receiptRefuse",en:a.UI.connections.receiptRefuse})]}),(0,s.jsxs)("span",{className:"conn-leak",children:["\xb7 ",(0,s.jsx)(l.T,{k:"connections.receiptLeak",en:a.UI.connections.receiptLeak})]}),(0,s.jsxs)("span",{children:["\xb7 ",(0,s.jsx)(l.T,{k:"connections.receiptBehalf",en:a.UI.connections.receiptBehalf})]})]})]})}function j(n){let{t:e,outcome:c}=n;if("ok"===c.kind){var t,o;let n=(0,d.nn)((t=e,o=c.repoNames,(0,d.DR)(o,t("connections.repoOnAccount",a.UI.connections.repoOnAccount))),d.v1.and,d.v1.comma);return(0,s.jsxs)("div",{className:"conn-diff conn-ok",children:[(0,s.jsxs)("b",{className:"conn-on",children:["✓ ",(0,s.jsx)(r.En,{children:e("connections.verifiedAs",a.UI.connections.verifiedAs).replace("{0}",c.login)})]}),c.repoNames.length>0?(0,s.jsx)("span",{children:(0,s.jsx)(r.En,{children:e("connections.verifiedSees",a.UI.connections.verifiedSees).replace("{0}",n)})}):0===c.installationCount?(0,s.jsx)("span",{children:(0,s.jsx)(l.T,{k:"connections.verifiedNoInstall",en:a.UI.connections.verifiedNoInstall})}):void 0!==c.installationCount&&0===c.reposUnread?(0,s.jsx)("span",{children:(0,s.jsx)(r.En,{children:e("connections.verifiedEmptyAccount",a.UI.connections.verifiedEmptyAccount).replace("{0}",c.login)})}):(0,s.jsx)("span",{children:(0,s.jsx)(l.T,{k:"connections.verifiedNone",en:a.UI.connections.verifiedNone})}),c.reposUnread>0&&(0,s.jsx)("span",{className:"conn-count",children:(0,s.jsx)(r.En,{children:e("connections.verifiedPartial",a.UI.connections.verifiedPartial).replace("{0}",String(c.reposUnread))})})]})}return"refused-write"===c.kind?(0,s.jsxs)("div",{className:"conn-diff conn-refused",children:[(0,s.jsxs)("b",{className:"conn-bad",children:["✗ ",(0,s.jsx)(l.T,{k:"connections.refusedWrite",en:a.UI.connections.refusedWrite})]}),(0,s.jsx)("span",{children:(0,s.jsx)(l.T,{k:"connections.refusedWriteBody",en:a.UI.connections.refusedWriteBody})}),c.detail&&(0,s.jsx)("span",{className:"conn-count",children:(0,s.jsx)(r.B,{children:c.detail})})]}):"disconnected"===c.kind?(0,s.jsx)("div",{className:"conn-diff",children:(0,s.jsx)("span",{className:"conn-done",children:(0,s.jsx)(l.T,{k:"connections.disconnected",en:a.UI.connections.disconnected})})}):(0,s.jsx)("div",{className:"conn-diff conn-refused",children:(0,s.jsx)("span",{className:"error-line",children:(0,s.jsx)(r.En,{children:"unreached"===c.kind?c.reason:c.message})})})}var f=c(639),v=c(1551);function g(){var n,e,c,d,h;let x=(0,f.x)(),j=(0,v.$c)(null==(n=x.cfg)?void 0:n.lang),g=(n,e)=>(0,v.tr)(j,n,e),b=(null!=(c=x.events)?c:[]).filter(n=>"mcp"===n.kind),N=null===x.events?void 0:b.length,k=function(n){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9e5,c=[];for(let d of n){var s,t,o,i,a,l,r;let n=null!=(s=d.caller)?s:null,u=null!=(t=d.callerState)?t:n?"named":"unrecorded",p=c[c.length-1];p&&p.caller===n&&p.state===u&&Math.abs(p.edge-d.ts)<=e?(p.rows.push(d),p.edge=d.ts,p.from=Math.min(p.from,d.ts),p.to=Math.max(p.to,d.ts),p.asks+=null!=(o=d.count)?o:1,d.tool&&p.tools.set(d.tool,(null!=(i=p.tools.get(d.tool))?i:0)+(null!=(a=d.count)?a:1))):c.push({caller:n,state:u,rows:[d],edge:d.ts,from:d.ts,to:d.ts,asks:null!=(l=d.count)?l:1,tools:new Map(d.tool?[[d.tool,null!=(r=d.count)?r:1]]:[])})}return c}(b),[I,U]=(0,o.useState)("in"),[w,y]=(0,o.useState)(!1),C=null!=(d=(0,i.DT)(x.clients))?d:void 0,[T,S]=(0,o.useState)(void 0),E=(0,i.RI)(x.clients,x.connectors);return(0,s.jsxs)(t.Ay,{active:"/connections",cockpit:x,children:[(0,s.jsxs)("div",{className:"pagebar",children:[(0,s.jsx)("h1",{children:(0,s.jsx)(l.T,{k:"connections.title",en:a.UI.connections.title})}),null!==E&&(0,s.jsx)("span",{className:"hcount",children:(0,s.jsx)(r.V,{n:E})}),(0,s.jsx)("span",{className:"purpose",children:(0,s.jsx)(l.T,{k:"connections.purpose",en:a.UI.connections.purpose})})]}),(0,s.jsx)(u.tU,{label:g("connections.title",a.UI.connections.title),active:I,onChange:U,tabs:[{id:"in",label:(0,s.jsx)(l.T,{k:"connections.secIn",en:a.UI.connections.secIn}),count:C},{id:"out",label:(0,s.jsx)(l.T,{k:"connections.secOut",en:a.UI.connections.secOut}),count:T},{id:"act",label:(0,s.jsx)(l.T,{k:"connections.secActivity",en:a.UI.connections.secActivity}),count:N}]}),(0,s.jsxs)("div",{role:"tabpanel",id:"panel-in","aria-labelledby":"tab-in",hidden:"in"!==I,children:[(0,s.jsxs)("p",{className:"promise",children:[(0,s.jsx)(l.T,{k:"connections.promise",en:a.UI.connections.promise})," ",(0,s.jsx)("button",{className:"conn-reveal","aria-expanded":w,onClick:()=>y(n=>!n),children:w?g("connections.rulesHide",a.UI.connections.rulesHide):g("connections.rulesShow",a.UI.connections.rulesShow)})]}),w&&(0,s.jsxs)("div",{className:"promise-rules",children:[(0,s.jsx)("p",{className:"meta",children:(0,s.jsx)(l.T,{k:"connections.inHelp",en:a.UI.connections.inHelp})}),(0,s.jsx)("p",{className:"meta",children:(0,s.jsx)(l.T,{k:"conn.help",en:a.UI.settings.connHelp})})]}),(0,s.jsx)(p,{lang:j,t:g,clients:x.clients,supported:x.clientsSupported,remembered:x.clientsRemembered,reload:x.readConnections})]}),(0,s.jsxs)("div",{role:"tabpanel",id:"panel-out","aria-labelledby":"tab-out",hidden:"out"!==I,children:[(0,s.jsx)("p",{className:"meta",children:(0,s.jsx)(l.T,{k:"connections.outHelp",en:a.UI.connections.outHelp})}),(0,s.jsx)(m,{t:g,state:null!=(h=null==(e=x.connectors)?void 0:e[0])?h:null,appReady:x.connectorsAppReady,reload:x.readConnectors,onCount:S})]}),"act"===I&&(0,s.jsxs)("div",{role:"tabpanel",id:"panel-act","aria-labelledby":"tab-act",children:[(0,s.jsx)("p",{className:"meta",children:(0,s.jsx)(l.T,{k:"connections.activitySub",en:a.UI.connections.activitySub})}),0===b.length?(0,s.jsx)("div",{className:"kit-card",children:(0,s.jsx)("div",{className:"lbl",children:(0,s.jsx)("span",{children:(0,s.jsx)(l.T,{k:"connections.activityNone",en:a.UI.connections.activityNone})})})}):(0,s.jsxs)("div",{className:"rule-list",children:[(0,s.jsx)("p",{className:"conn-act-law",children:(0,s.jsx)(l.T,{k:"connections.activityLaw",en:a.UI.connections.activityLaw})}),k.map(n=>{var e;return(0,s.jsxs)("div",{className:"rule-group",children:[(0,s.jsxs)("div",{className:"conn-act-head",children:["unrecorded"!==n.state&&(0,s.jsx)("span",{className:"conn-act-cat",children:"named"===n.state&&n.caller?(0,s.jsx)(r.En,{children:n.caller}):(0,s.jsx)(l.T,{k:"connections.activityUnnamed",en:a.UI.connections.activityUnnamed})}),(0,s.jsx)("span",{className:"conn-act-asks",children:g("connections.activityAsks",a.UI.connections.activityAsks(n.asks))}),[...n.tools.entries()].map(n=>{let[e,c]=n;return(0,s.jsx)("span",{className:"conn-act-tool",children:(0,s.jsx)(r.En,{children:c>1?"".concat(e," x").concat(c):e})},e)})]}),"unidentified"===n.state&&(0,s.jsx)("p",{className:"conn-act-note",children:(0,s.jsx)(l.T,{k:"connections.activityUnidentifiedNote",en:a.UI.connections.activityUnidentifiedNote})}),n.rows.map((n,e)=>{var c;return(0,s.jsxs)("div",{className:"rule-row conn-act",children:[(0,s.jsx)("span",{className:"conn-act-when",children:(0,s.jsx)(r.En,{children:(0,s.jsx)(t.fV,{ts:n.ts})})}),(0,s.jsx)("span",{className:"conn-act-what",children:(0,s.jsx)(r.En,{children:null!=(c=n.activityText)?c:n.text})})]},"".concat(n.ts,"-").concat(e))})]},"".concat(n.state,"|").concat(null!=(e=n.caller)?e:"","|").concat(n.to))})]})]})]})}},2613:(n,e,c)=>{"use strict";c.d(e,{fn:()=>p,hf:()=>u,ob:()=>d,tU:()=>h});var s=c(5155),t=c(2115),o=c(7650),i=c(436),a=c(5310),l=c(3034),r=c(797);function d(n){let{actions:e,label:c}=n,[l,d]=(0,t.useState)(!1),[u,p]=(0,t.useState)(null),h=(0,t.useRef)(null),m=(0,t.useRef)(null),x=(0,t.useId)(),j=(0,a.kj)(),f=(0,a.cO)(),v=(0,t.useCallback)(()=>{var n,e,c;let s=null==(n=h.current)?void 0:n.firstElementChild;if(!s)return;let t=s.getBoundingClientRect(),o=null!=(c=null==(e=m.current)?void 0:e.offsetHeight)?c:0,i=window.innerHeight-t.bottom,a=o>0&&i<o+8&&t.top>i;p({top:a?t.top-o-4:t.bottom+4,end:Math.max(4,window.innerWidth-t.right),flip:a})},[]);return((0,t.useLayoutEffect)(()=>{l&&v()},[l,v]),(0,t.useEffect)(()=>{if(!l)return;let n=n=>{var e,c;let s=n.target;(null==(e=h.current)?void 0:e.contains(s))||(null==(c=m.current)?void 0:c.contains(s))||d(!1)},e=n=>{"Escape"===n.key&&d(!1)},c=()=>v();return document.addEventListener("mousedown",n),document.addEventListener("keydown",e),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("keydown",e),window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c)}},[l,v]),0===e.length)?null:(0,s.jsxs)("div",{className:"ovf",ref:h,children:[(0,s.jsxs)("button",{className:"ovf-btn",type:"button","aria-haspopup":"menu","aria-expanded":l,"aria-controls":x,...(0,r.uN)(f.moreActions),onClick:()=>d(n=>!n),children:[(0,s.jsx)(a.T,{k:"btn.more",en:null!=c?c:i.UI.radar.moreActions})," ",(0,s.jsx)("span",{"aria-hidden":!0,children:"▾"})]}),l&&"undefined"!=typeof document&&(0,o.createPortal)((0,s.jsx)("div",{className:"ovf-menu",id:x,role:"menu",ref:m,"aria-label":j("act.moreAria",i.UI.radar.moreActionsAria),style:u?{insetBlockStart:u.top,insetInlineEnd:u.end}:{visibility:"hidden"},children:e.map(n=>(0,s.jsxs)("button",{role:"menuitem",type:"button",...(0,r.uN)(n.title),className:n.danger?"danger":void 0,onClick:()=>{d(!1),n.onClick()},children:[n.label,n.effect&&(0,s.jsx)("span",{children:n.effect})]},n.label))}),document.body)]})}function u(n){let{done:e,total:c,working:t}=n,o=(0,a.kj)();(0,a.cO)();let r="ar"===(0,a.uU)();return c>0&&e<c?(0,s.jsxs)("div",{className:"streamline",role:"status","aria-live":"polite",children:[(0,s.jsx)("i",{"aria-hidden":!0}),r?(0,s.jsxs)(s.Fragment,{children:[o("stream.countingLead","")," ",(0,s.jsx)(l.V,{n:e})," ",o("stream.countingMid","")," ",(0,s.jsx)(l.V,{n:c})," ",o("stream.countingTail","")]}):i.UI.stream.counting(e,c)]}):t?(0,s.jsxs)("div",{className:"streamline",role:"status","aria-live":"polite",children:[(0,s.jsx)("i",{"aria-hidden":!0}),o("stream.starting",i.UI.stream.starting)]}):null}function p(n){let{view:e,onChange:c}=n,t=(0,a.kj)();return(0,a.cO)(),(0,s.jsxs)("div",{className:"viewseg",role:"group","aria-label":t("radar.viewAria",i.UI.radar.viewAria),children:[(0,s.jsx)("button",{type:"button",className:"cards"===e?"on":"","aria-pressed":"cards"===e,onClick:()=>c("cards"),children:(0,s.jsx)(a.T,{k:"btn.grid",en:i.UI.radar.viewGrid})}),(0,s.jsx)("button",{type:"button",className:"rows"===e?"on":"","aria-pressed":"rows"===e,onClick:()=>c("rows"),children:(0,s.jsx)(a.T,{k:"btn.rows",en:i.UI.radar.viewRows})})]})}function h(n){let{tabs:e,active:c,onChange:t,label:o,vertical:i}=n;return(0,s.jsx)("div",{className:"tabs".concat(i?" tabs-v":""),role:"tablist","aria-orientation":i?"vertical":void 0,"aria-label":o,children:e.map(n=>(0,s.jsxs)("button",{type:"button",role:"tab",id:"tab-".concat(n.id),className:n.id===c?"on":"","aria-selected":n.id===c,"aria-controls":"panel-".concat(n.id),onClick:()=>t(n.id),children:[n.label,void 0!==n.count&&(0,s.jsx)("span",{className:"tabn",children:n.count})]},n.id))})}},8049:(n,e,c)=>{Promise.resolve().then(c.bind(c,148))}},n=>{n.O(0,[3192,8050,8441,1255,7358],()=>n(n.s=8049)),_N_E=n.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6839],{1163:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>y});var t=a(5155),i=a(
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6839],{1163:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>y});var t=a(5155),i=a(7406),n=a(5623),r=a(639),d=a(2613),o=a(7897),c=a(1551),l=a(9712),h=a(436),m=a(5310),u=a(3034),p=a(6400),b=a(797);let g=["time-capsule","safety","money","identity","health","site"];function y(){var e,s;let a=(0,r.x)(),{insights:y,insightsMuted:v,insightsPending:f,insightsDeepTotal:w,insightsFailed:j,demo:x}=a,k=(0,c.$c)(null==(e=a.cfg)?void 0:e.lang),N=(e,s)=>(0,c.tr)(k,e,s),D=(0,m.qN)(k),T=null!=(s=a.views.discoveries)?s:"cards",I=(0,p.yr)(y),S=g.map(e=>({cat:e,items:I.filter(s=>s.cat===e)})).filter(e=>e.items.length>0),U=I.length,R=(0,p.ZT)(y).length;return(0,t.jsxs)(i.Ay,{active:"/discoveries",cockpit:a,children:[(0,t.jsxs)("div",{className:"pagebar",children:[(0,t.jsx)("h1",{children:(0,t.jsx)(m.T,{k:"room.discoveries",en:h.UI.discoveries.title})}),(0,t.jsx)("span",{className:"purpose",...(0,b.uN)(D.estate),children:(0,t.jsx)(m.T,{k:"disc.purpose",en:h.UI.discoveries.purpose})}),(0,t.jsxs)("div",{className:"tools",style:{marginInlineStart:"auto"},children:[(0,t.jsx)(o.aA,{view:T,onChange:e=>a.setView("discoveries",e)}),(0,t.jsx)("a",{className:"scan",style:{textDecoration:"none"},href:"/radar",children:(0,t.jsx)(m.T,{k:"btn.backToRadar",en:h.UI.discoveries.backToRadar})})]})]}),x&&(0,t.jsxs)("p",{className:"banner",children:[N("banner.discLead",h.UI.discoveries.bannerLead)," ",(0,t.jsx)("a",{className:"link",href:"/radar",children:N("banner.radarLink",h.UI.discoveries.bannerLink)})," ",N("banner.discTail",h.UI.discoveries.bannerTail)]}),y?0===U&&0===R&&0===v.length&&0===f&&0===j.length?(0,t.jsxs)("div",{className:"empty",children:[(0,t.jsx)("p",{className:"invite",children:N("disc.emptyInvite",h.UI.discoveries.emptyInvite)}),(0,t.jsx)("p",{children:N("disc.emptyLine",h.UI.discoveries.emptyLine)}),(0,t.jsx)("a",{className:"btn primary",href:"/radar",children:N("btn.goRadar",h.UI.discoveries.goRadar)})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.hf,{done:w-f,total:w}),(0,t.jsx)(p.LZ,{cockpit:a}),(0,t.jsx)("div",{className:"disc-groups",children:S.map(e=>(0,t.jsxs)("section",{className:"disc-group",children:[(0,t.jsxs)("div",{className:"sec",children:[(0,t.jsx)("h2",{children:(0,t.jsx)(m.T,{k:"cat.".concat(e.cat),en:h.UI.discoveries.cat[e.cat]})}),(0,t.jsx)("span",{className:"meta",children:(0,t.jsx)(u.V,{n:e.items.length})})]}),"cards"===T?(0,t.jsx)("div",{className:"grid three",children:e.items.map(e=>(0,t.jsx)(n.JF,{d:e,cockpit:a},e.id))}):(0,t.jsx)("div",{className:"wk",children:e.items.map(e=>(0,t.jsx)(n.rO,{d:e,cockpit:a},e.id))})]},e.cat))}),j.length>0&&(0,t.jsxs)("div",{className:"disc-muted-panel",style:{marginBlockStart:18},children:[(0,t.jsx)("div",{className:"k",...(0,b.uN)(D.detectors),children:N("disc.failedTitle",h.UI.discoveries.failedTitle)}),(0,t.jsxs)("p",{children:[j.map((e,s)=>(0,t.jsxs)("span",{children:[s>0&&" \xb7 ",(0,t.jsx)("span",{...(0,b.uN)((0,l.Sc)(e.id)),children:e.name})]},e.id)),"."," ",(0,t.jsx)(m.T,{k:"disc.failedTail",en:h.UI.discoveries.failedTail})]})]}),v.length>0&&(0,t.jsxs)("div",{className:"disc-muted-panel",style:{marginBlockStart:18},children:[(0,t.jsx)("div",{className:"k",...(0,b.uN)(D.detectors),children:N("disc.mutedTitle",h.UI.discoveries.mutedTitle)}),(0,t.jsxs)("p",{children:[v.map((e,s)=>(0,t.jsxs)("span",{children:[s>0&&" \xb7 ",(0,t.jsx)("span",{...(0,b.uN)((0,l.Sc)(e.id)),children:e.name})]},e.id)),"."," ",(0,t.jsx)("a",{href:"/settings",children:N("disc.unmute",h.UI.discoveries.unmute)})]})]})]}):(0,t.jsx)(d.hf,{done:0,total:0,working:!0})]})}},9198:(e,s,a)=>{Promise.resolve().then(a.bind(a,1163))},9712:(e,s,a)=>{"use strict";a.d(s,{Sc:()=>i,ZI:()=>t});let t=[{id:"paid-sdk",cat:"money",name:"Paid services in dormant projects",blurb:"Projects you haven't opened in a month or more that still reference paid services"},{id:"cloud-config-stale",cat:"money",name:"Deploy configs with no recent work",blurb:"Deploy files (Vercel, Railway, Docker) in projects that stopped moving"},{id:"identity",cat:"identity",name:"Commit identity mismatches",blurb:"Projects committing as a different email than your global identity"},{id:"ssh-keys",cat:"identity",name:"SSH key inventory",blurb:"The keys living in your .ssh folder and how old they are"},{id:"unpushed",cat:"time-capsule",name:"Unpushed commits",blurb:"Commits that exist only on this machine"},{id:"no-remote",cat:"time-capsule",name:"Projects with no remote",blurb:"Projects whose only home is this disk"},{id:"no-upstream",cat:"time-capsule",name:"Branches that push nowhere",blurb:"Local branches with no upstream, so their commits stay on this machine"},{id:"no-git-folder",cat:"time-capsule",name:"Folders with no git at all",blurb:"Watched folders holding work that has no history and no copy elsewhere"},{id:"readme-stub",cat:"time-capsule",name:"README still a placeholder",blurb:"READMEs that still say TODO, with age"},{id:"todo-census",cat:"time-capsule",name:"TODO census",blurb:"TODOs across the estate, eldest quoted"},{id:"abandoned-branches",cat:"time-capsule",name:"Abandoned branches",blurb:"Branches untouched for six months or more"},{id:"anniversary",cat:"time-capsule",name:"Project anniversaries",blurb:"First-commit birthdays coming up"},{id:"inventory-burst",cat:"time-capsule",name:"Large deletions and change bursts",blurb:"Watched folders that lost a lot of files, or had a lot of them change, since the last look"},{id:"file-gone",cat:"time-capsule",name:"Files that disappeared",blurb:"Files that were there last time and are not now, with the command to bring back the ones git still holds"},{id:"agent-effects",cat:"time-capsule",name:"Changes while an agent was connected",blurb:"Files that changed or went missing in a window that overlapped an agent's questions - af360 cannot tell whose edits they were"},{id:"sync-folder",cat:"safety",name:"Repos inside sync folders",blurb:"Git repos living inside OneDrive, Dropbox or Google Drive"},{id:"history-secrets",cat:"safety",name:"Key-shaped strings in git history",blurb:"Access-key-shaped strings in the history of publicly-remoted repos"},{id:"gitignore-gaps",cat:"safety",name:".gitignore gaps",blurb:"Repos tracking node_modules, .env or build output"},{id:"dev-server-exposed",cat:"safety",name:"Dev server open to the network",blurb:"Dev scripts binding 0.0.0.0 instead of localhost"},{id:"install-scripts",cat:"safety",name:"Dependencies with install scripts",blurb:"Dependencies that run their own code at install time, named"},{id:"dep-uncommitted",cat:"safety",name:"Installs git has not recorded",blurb:"Dependency lists that changed on disk and have not been committed"},{id:"unbacked-ignored",cat:"safety",name:"Ignored files in a project with no remote",blurb:"Environment files, databases and upload folders git ignores, in projects with nowhere to push"},{id:"node-modules",cat:"health",name:"node_modules weight",blurb:"What your node_modules folders weigh and what dormancy would give back"},{id:"build-artifacts",cat:"health",name:"Build-artifact graveyards",blurb:"Old .next, dist and build folders with sizes"},{id:"runtime-eol",cat:"health",name:"Runtime end of life",blurb:"Your Node.js version against its published support dates"},{id:"disk-weight",cat:"health",name:"Tool caches",blurb:"What the caches other tools leave behind are weighing, not counting node_modules or build folders"},{id:"runtime-census",cat:"health",name:"Runtime census",blurb:"Projects asking for a Node version this machine is not running"},{id:"repo-front-door",cat:"health",name:"README and licence",blurb:"Repositories with a remote that carry neither"},{id:"dep-versions",cat:"health",name:"Same dependency, many versions",blurb:"One dependency installed at several versions across the estate, with sizes"},{id:"dep-arrivals",cat:"health",name:"Dependency arrivals",blurb:"What joined your dependency lists, and the date the project recorded it"},{id:"estate-stats",cat:"health",name:"Estate line count",blurb:"Lines of code and language map - the pride stat"},{id:"duplicate-downloads",cat:"health",name:"Downloads sharing a project's name",blurb:"Downloaded folders whose name matches a project you already have, with sizes"},{id:"deploy-sites",cat:"site",name:"Addresses your projects deploy to",blurb:"Hostnames named by deploy configs in your own repos, offered for watching"},{id:"og-preview",cat:"site",name:"Social share preview",blurb:"The card WhatsApp and LinkedIn render when your link is shared"},{id:"security-headers",cat:"site",name:"Security headers",blurb:"Protective headers your site does or doesn't send"},{id:"mixed-content",cat:"site",name:"Mixed content",blurb:"Secure pages loading pieces over plain http"},{id:"redirect-chain",cat:"site",name:"Redirect chain and www",blurb:"How many hops a visit takes, and whether www agrees with the bare domain"},{id:"robots-blocking",cat:"site",name:"robots.txt blocking all",blurb:"A robots.txt turning every search engine away"},{id:"sitemap-missing",cat:"site",name:"Sitemap missing",blurb:"No sitemap for search engines to read"},{id:"dns-watch",cat:"site",name:"DNS snapshot and changes",blurb:"Your domain's DNS records, and any change since last look"}],i=e=>{var s;return null==(s=t.find(s=>s.id===e))?void 0:s.blurb}}},e=>{e.O(0,[3192,8050,7897,5623,8441,1255,7358],()=>e(e.s=9198)),_N_E=e.O()}]);
|
package/dist/.next/static/chunks/app/{error-37987420de14c10c.js → error-c67c297ef2dd70de.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8039],{63:(r,e,t)=>{"use strict";var o=t(7260);t.o(o,"usePathname")&&t.d(e,{usePathname:function(){return o.usePathname}}),t.o(o,"useRouter")&&t.d(e,{useRouter:function(){return o.useRouter}})},2979:(r,e,t)=>{Promise.resolve().then(t.bind(t,9567))},9567:(r,e,t)=>{"use strict";t.r(e),t.d(e,{default:()=>c});var o=t(5155),n=t(63),i=t(
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8039],{63:(r,e,t)=>{"use strict";var o=t(7260);t.o(o,"usePathname")&&t.d(e,{usePathname:function(){return o.usePathname}}),t.o(o,"useRouter")&&t.d(e,{useRouter:function(){return o.useRouter}})},2979:(r,e,t)=>{Promise.resolve().then(t.bind(t,9567))},9567:(r,e,t)=>{"use strict";t.r(e),t.d(e,{default:()=>c});var o=t(5155),n=t(63),i=t(7406),a=t(639),s=t(436),u=t(1551);function c(r){let{reset:e}=r,t=(0,a.x)(),c=(0,n.usePathname)()||"/radar",l=t.attention&&Array.isArray(t.attention.items)?t.attention:null,m=(r,e)=>{var o;return(0,u.tr)((0,u.$c)(null==(o=t.cfg)?void 0:o.lang),r,e)};return(0,o.jsx)(i.Ay,{active:c,cockpit:{...t,attention:l},children:(0,o.jsxs)("div",{className:"empty",children:[(0,o.jsx)("p",{className:"invite",children:m("roomError.invite",s.UI.roomError.invite)}),(0,o.jsx)("p",{children:m("roomError.line",s.UI.roomError.line)}),(0,o.jsx)("p",{className:"meta",children:m("roomError.fixLead",s.UI.roomError.fixLead)}),(0,o.jsx)("p",{children:m("roomError.fixRetry",s.UI.roomError.fixRetry)}),(0,o.jsx)("button",{className:"btn primary",onClick:e,children:m("btn.retry",s.UI.roomError.retry)})]})})}}},r=>{r.O(0,[3192,8050,8441,1255,7358],()=>r(r.s=2979)),_N_E=r.O()}]);
|