@nodatachat/mcp 1.6.22 → 1.6.23

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/gate.js CHANGED
@@ -1,66 +1,72 @@
1
- /*! @nodatachat/mcp 1.6.22 | Copyright 2026 Capsule Ltd. | FSL-1.1-ALv2 | see LICENSE.md */
2
- import{appendFileSync as Ea,copyFileSync as np,existsSync as xn,mkdirSync as os,readdirSync as Aa,readFileSync as wn,statSync as ht,writeFileSync as $a}from"node:fs";import{homedir as X}from"node:os";import{basename as mt,extname as as,isAbsolute as q,join as _e,relative as cs,resolve as D}from"node:path";import{TextDecoder as br}from"node:util";var F={text:[],header:[],secrets:[],table:null,amounts:null,severity:null};function wt(e){e.table&&(F.table=e.table),e.severity&&(F.severity=e.severity),e.amounts&&(F.amounts=e.amounts);for(let t of e.text??[])F.text.some(r=>r.kind===t.kind)||F.text.push(t);e.header&&!F.header.includes(e.header)&&F.header.push(e.header);for(let t of e.secrets??[])F.secrets.some(r=>r.id===t.id)||F.secrets.push(t)}function kt(){return F.amounts?.()===!0}function Ne(){return F.text}function Tn(){return F.header}function ve(){return F.table}function Cn(){return F.secrets}var Oe=[{id:"aws-access-key",name:"AWS Access Key",pattern:/(?:^|[^A-Z0-9])AKIA(?!X{16})[A-Z2-7]{16}(?:[^A-Z2-7]|$)/,severity:"critical"},{id:"aws-secret-key",name:"AWS Secret Key",pattern:/(?:aws_secret_access_key|aws_secret_key|secret_access_key)\s*[=:]\s*['"]?[A-Za-z0-9/+=]{40}['"]?/,severity:"critical"},{id:"gcp-api-key",name:"GCP API Key",pattern:/AIza[0-9A-Za-z_-]{35}/,severity:"critical"},{id:"gcp-service-account",name:"GCP Service Account",pattern:/"type"\s*:\s*"service_account"/,severity:"critical"},{id:"github-token",name:"GitHub Token",pattern:/gh[pousr]_[0-9a-zA-Z]{36,}/,severity:"critical"},{id:"github-fine-grained",name:"GitHub Fine-Grained Token",pattern:/github_pat_[0-9a-zA-Z_]{22,}/,severity:"critical"},{id:"gitlab-token",name:"GitLab Token",pattern:/glpat-[0-9a-zA-Z_-]{20,}/,severity:"critical"},{id:"stripe-secret",name:"Stripe Secret Key",pattern:/sk_live_[0-9a-zA-Z]{24,}/,severity:"critical"},{id:"stripe-restricted",name:"Stripe Restricted Key",pattern:/rk_live_[0-9a-zA-Z]{24,}/,severity:"critical"},{id:"slack-token",name:"Slack Token",pattern:/xox[baprs]-[0-9a-zA-Z-]{10,}/,severity:"high"},{id:"slack-webhook",name:"Slack Webhook",pattern:/hooks\.slack\.com\/services\/T[0-9A-Z]{8,}\/B[0-9A-Z]{8,}\/[0-9a-zA-Z]{24}/,severity:"high"},{id:"twilio-api-key",name:"Twilio API Key",pattern:/SK[0-9a-fA-F]{32}/,severity:"high"},{id:"sendgrid-api-key",name:"SendGrid API Key",pattern:/SG\.[0-9a-zA-Z_-]{22}\.[0-9a-zA-Z_-]{43}/,severity:"critical"},{id:"postgres-uri",name:"PostgreSQL Connection String",pattern:/postgres(?:ql)?:\/\/[^\s'"]{10,}/,severity:"critical"},{id:"mongodb-uri",name:"MongoDB Connection String",pattern:/mongodb(?:\+srv)?:\/\/[^\s'"]{10,}/,severity:"critical"},{id:"redis-uri",name:"Redis Connection String",pattern:/redis(?:s)?:\/\/[^\s'"]{10,}/,severity:"high"},{id:"openai-key",name:"OpenAI API Key",pattern:/sk-[0-9a-zA-Z]{20,}T3BlbkFJ[0-9a-zA-Z]{20,}/,severity:"critical"},{id:"openai-project-key",name:"OpenAI API Key",pattern:/sk-(?:proj|svcacct|admin)-[0-9A-Za-z_-]{40,}/,severity:"critical"},{id:"anthropic-key",name:"Anthropic API Key",pattern:/sk-ant-[0-9a-zA-Z_-]{40,}/,severity:"critical"},{id:"firebase-key",name:"Firebase API Key",pattern:/AIza[0-9A-Za-z_-]{35}/,severity:"high"},{id:"supabase-key",name:"Supabase Service Key",pattern:/eyJ[0-9a-zA-Z_-]{100,}/,severity:"critical"},{id:"supabase-access-token",name:"Supabase Access Token",pattern:/\bsbp_[0-9a-f]{40}\b/,severity:"critical"},{id:"supabase-secret-key",name:"Supabase Secret Key",pattern:/\bsb_secret_[0-9A-Za-z_-]{20,}/,severity:"critical"},{id:"private-key",name:"Private Key",pattern:/-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/,severity:"critical"},{id:"jwt-secret",name:"JWT/Generic Secret",pattern:/(?:jwt_secret|JWT_SECRET|secret_key|SECRET_KEY|api_secret|API_SECRET)\s*[=:]\s*['"][^'"]{8,}['"]/,severity:"high"},{id:"password-in-code",name:"Password in Code",pattern:/(?:password|passwd|pwd)\s*[=:]\s*['"][^'"]{8,}['"]/,severity:"high"},{id:"bearer-token",name:"Bearer Token in Code",pattern:/['"]Bearer\s+[0-9a-zA-Z._-]{20,}['"]/,severity:"high"}];function Se(){let e=Cn().filter(t=>!Oe.some(r=>r.id===t.id));return[...Oe,...e]}var Fs=[{pattern:/^(full_?name|first_?name|last_?name|spouse_?name|beneficiary_?name)$/i,type:"name",label:"Person name"},{pattern:/^(email|e_?mail|email_?address)$/i,type:"email",label:"Email address"},{pattern:/^(phone|mobile|telephone|phone_?number|cell_?phone)$/i,type:"phone",label:"Phone number"},{pattern:/^(id_?number|identity|ssn|social_?security|national_?id|teudat_?zehut)$/i,type:"id",label:"ID number"},{pattern:/^(address|street_?address|home_?address)$/i,type:"address",label:"Address"},{pattern:/^(date_?of_?birth|dob|birth_?date|birthday)$/i,type:"dob",label:"Date of birth"},{pattern:/^(bank_?account|iban|account_?number|bank_?details|routing_?number)$/i,type:"financial",label:"Bank account"},{pattern:/^(credit_?card|card_?number|cvv|cc_?number)$/i,type:"financial",label:"Credit card"},{pattern:/^(salary|income|commission|premium|compensation)$/i,type:"financial",label:"Salary / income"},{pattern:/^(medical_?info|health_?conditions|diagnosis|medication|prescription)$/i,type:"medical",label:"Medical"},{pattern:/^(passport|passport_?number|passport_?id)$/i,type:"id",label:"Passport"},{pattern:/^(driver_?license|drivers_?license|dl_?number)$/i,type:"id",label:"Driver license"},{pattern:/^(tax_?id|tin|vat_?number|ein)$/i,type:"financial",label:"Tax ID"},{pattern:/^(insurance_?number|policy_?number|member_?id)$/i,type:"id",label:"Insurance/Policy"},{pattern:/^(biometric|fingerprint|face_?id|retina)$/i,type:"biometric",label:"Biometric"},{pattern:/^(latitude|longitude|lat|lng|geo_?location|coordinates)$/i,type:"location",label:"Geolocation"}],js=[{pattern:/^(?:שם|שם_מלא|שם פרטי|שם_פרטי|שם משפחה|שם_משפחה|שם הלקוח|שם בן זוג|שם המבוטח|שם המוטב|שם הילד|שם הקטין)$/i,type:"name",label:"\u05E9\u05DD \u05D0\u05D3\u05DD"},{pattern:/^(?:ת"ז|ת\.ז|ת ז|תז|תעודת זהות|תעודת_זהות|מספר זהות|מס' זהות|teudat_zehut|tz|israeli_id|il_id)$/i,type:"id",label:"\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA"},{pattern:/^(?:דרכון|מספר דרכון|רישיון נהיגה|רישיון_נהיגה|רשיון נהיגה)$/i,type:"id",label:"\u05D3\u05E8\u05DB\u05D5\u05DF/\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF"},{pattern:/^(?:מייל|דוא"ל|דוא_ל|דואר אלקטרוני|אימייל|כתובת מייל)$/i,type:"email",label:"\u05D3\u05D5\u05D0\u05E8 \u05D0\u05DC\u05E7\u05D8\u05E8\u05D5\u05E0\u05D9"},{pattern:/^(?:טלפון|טל'|נייד|פלאפון|סלולרי|מספר טלפון|טלפון נייד)$/i,type:"phone",label:"\u05DE\u05E1\u05E4\u05E8 \u05D8\u05DC\u05E4\u05D5\u05DF"},{pattern:/^(?:כתובת|כתובת מגורים|רחוב|מס בית|עיר|ישוב|יישוב|מיקוד|כתובת מלאה|מען)$/i,type:"address",label:"\u05DB\u05EA\u05D5\u05D1\u05EA"},{pattern:/^(?:תאריך לידה|ת לידה|תאריך הולדת|יום הולדת|גיל)$/i,type:"dob",label:"\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4"},{pattern:/^(?:חשבון בנק|מספר חשבון|מס חשבון|סניף|iban|iban_il)$/i,type:"financial",label:"\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7"},{pattern:/^(?:כרטיס אשראי|מספר אשראי|cvv|אשראי)$/i,type:"financial",label:"\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9"},{pattern:/^(?:שכר|משכורת|הכנסה|פרמיה|שכר ברוטו|שכר נטו|תגמול|בונוס|פיצוי)$/i,type:"financial",label:"\u05E9\u05DB\u05E8/\u05D4\u05DB\u05E0\u05E1\u05D4"},{pattern:/^(?:אבחון|אבחנה|מחלה|תרופה|מרשם|בדיקה רפואית|מצב רפואי|חיסון|רגישות|אלרגיה|סוג דם)$/i,type:"medical",label:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9"},{pattern:/^(?:מספר פוליסה|מס פוליסה|פוליסה|מספר חבר|מספר ביטוח)$/i,type:"id",label:"\u05E4\u05D5\u05DC\u05D9\u05E1\u05D4/\u05D7\u05D1\u05E8\u05D5\u05EA"},{pattern:/^(?:שם הילד|תעודת זהות של ילד|ילדים|קטין|מספר ילדים|תעודת לידה)$/i,type:"minor_data",label:"\u05DE\u05D9\u05D3\u05E2 \u05E2\u05DC \u05E7\u05D8\u05D9\u05DF"},{pattern:/^(?:דת|לאום|מין|נטייה מינית|השקפה פוליטית|מצב משפחתי|עדה|מוצא)$/i,type:"sensitive_personal",label:"\u05DE\u05D9\u05D3\u05E2 \u05D0\u05D9\u05E9\u05D9 \u05E8\u05D2\u05D9\u05E9"},{pattern:/^(?:מספר רכב|מס רכב|לוחית רישוי|מספר רישוי)$/i,type:"tracking",label:"\u05DE\u05E1\u05E4\u05E8 \u05E8\u05DB\u05D1"}],Ms=/^(id|uuid|created_?at|updated_?at|deleted_?at|status|type|category|description|title|slug|url|path|key|value|enabled|active|public|version|metadata|config|settings|data|content|note|comment|label|color|icon)$/i,Hs=/^שם[ _](?:ה)?(?:קובץ|מוצר|פריט|חברה|ארגון|עסק|פרויקט|גיליון|טבלה|שדה|קטגוריה|סניף|בנק|עיר|רחוב|ישוב|יישוב|מסמך|תוכנית|חבילה|קורס|מחלקה|אתר|דומיין|מותג|ספק|שירות|תפקיד)$|^(file|product|item|company|org|organization|project|sheet|table|field|category|branch|bank|city|street|document|plan|course|department|site|domain|brand|vendor|service|role)[ _-]?name$/i;function Ee(e){if(!e)return null;let t=e.trim();if(Ms.test(t)||/^name$/i.test(t)||/^\[[A-Z_]+(?:-\d+)?\]$/.test(t))return null;let r=t.replace(/[\s-]+/g,"_");for(let n of[...js,...Fs])if(n.pattern.test(t)||n.pattern.test(r))return{type:n.type,label:n.label};if(Hs.test(t))return null;if(/^שם[ _][\u0590-\u05FF"'׳ ]{2,20}$/.test(t))return{type:"name",label:"\u05E9\u05DD \u05D0\u05D3\u05DD"};if(/^(customer|client|employee|inspector|supervisor|contact|person|patient|user|owner|manager|agent|member|driver|tenant|student|parent|beneficiary|insured)_?(full_?)?name$/i.test(r))return{type:"name",label:"Person name"};for(let n of Tn()){let s=n(t);if(s)return{type:s.type,label:s.label}}return null}function Pn(e){let t=String(e??"").replace(/\D/g,"");if(t.length===0||t.length>9)return!1;let r=t.padStart(9,"0"),n=0;for(let s=0;s<9;s++){let i=parseInt(r[s]??"0",10)*(s%2+1);i>9&&(i-=9),n+=i}return n%10===0&&parseInt(r,10)>0}function Us(e){let t=String(e??"").replace(/\D/g,"");if(t.length<12||t.length>19)return!1;let r=0,n=!1;for(let s=t.length-1;s>=0;s-=1){let i=parseInt(t[s]??"0",10);n&&(i*=2,i>9&&(i-=9)),r+=i,n=!n}return r%10===0}function Ln(e){let t=String(e??"").replace(/\s/g,"").toUpperCase();if(!/^[A-Z]{2}\d{2}[A-Z0-9]{10,30}$/.test(t))return!1;let r=t.slice(4)+t.slice(0,4),n=0;for(let s of r){let i=s>="A"&&s<="Z"?String(s.charCodeAt(0)-55):s;for(let o of i)n=(n*10+Number(o))%97}return n===1}var vt="(?<!\\d)(?<!\\d[.,])",St="(?!\\d)(?![.,]\\d)",Et=[{subkind:"israeli_id",severity:"high",pattern:new RegExp(`${vt}(?:\\d{8}-\\d|\\d{9})${St}`,"g"),validate:Pn,hint:"Israeli national ID (check digit verified) in plaintext. Encrypt the column or mask it at rest."},{subkind:"credit_card",severity:"critical",pattern:new RegExp(`${vt}[2-6][ -]?(?:\\d[ -]?){11,17}\\d${St}`,"g"),validate:Us,hint:"Payment card number (Luhn verified) in plaintext. This is PCI scope."},{subkind:"iban",severity:"high",pattern:/\b[A-Z]{2}\d{2}(?: ?[A-Z0-9]{4}){2,7}(?: ?[A-Z0-9]{1,4})?\b/g,validate:Ln,hint:"Bank account in IBAN form (mod-97 verified) in plaintext."},{subkind:"israeli_phone",severity:"medium",pattern:new RegExp(`${vt}(?:\\+972[- ]?|0)(?:[57]\\d|[2-489])[- ]?\\d{3}[- ]?\\d{4}${St}`,"g"),validate:e=>{let t=e.replace(/\D/g,"").replace(/^972/,"0");return/^0[57]\d{8}$/.test(t)?!0:/^0[2-489]\d{7}$/.test(t)&&(/[- ]/.test(e)||e.startsWith("+972"))},hint:"Israeli phone number in plaintext."}];function De(e,t){let r=[],n="",s=!1;for(let i=0;i<e.length;i++){let o=e[i];s?o==='"'&&e[i+1]==='"'?(n+='"',i++):o==='"'?s=!1:n+=o:o==='"'?s=!0:o===t?(r.push(n),n=""):n+=o}return r.push(n),r}import{inflateRawSync as xi}from"node:zlib";import{inflateSync as Nn}from"node:zlib";var Fe=new Set([".pdf"]),On=8*1024*1024;function Mn(e){let t=e.toString("latin1"),r=new Map,n=/(\d+)\s+(\d+)\s+obj\b/g,s;for(;(s=n.exec(t))!==null;){let i=Number(s[1]),o=n.lastIndex,a=t.indexOf("endobj",o);if(a<0)continue;let c=t.indexOf("stream",o),l,p=null;if(c>=0&&c<a){l=t.slice(o,c);let d=c+6;t[d]==="\r"&&(d+=1),t[d]===`
3
- `&&(d+=1);let m=t.indexOf("endstream",d);m>d&&(p=e.subarray(d,m))}else l=t.slice(o,a);r.set(i,{num:i,dict:l,stream:p})}for(let i of[...r.values()]){if(!i.stream||!/\/Type\s*\/ObjStm\b/.test(i.dict))continue;let o=je(i),a=Number(/\/N\s+(\d+)/.exec(i.dict)?.[1]??0),c=Number(/\/First\s+(\d+)/.exec(i.dict)?.[1]??-1);if(o===null||!a||c<0)continue;let l=o.slice(0,c).trim().split(/\s+/).map(Number);for(let p=0;p<a;p+=1){let d=l[2*p],m=l[2*p+1];if(d===void 0||m===void 0||Number.isNaN(d)||Number.isNaN(m))break;let f=p+1<a?l[2*(p+1)+1]:void 0,g=o.slice(c+m,f!==void 0?c+f:void 0);r.has(d)||r.set(d,{num:d,dict:g,stream:null})}}return r}function At(e){let t=[...e.replace(/\s+/g,"")];if(t.length<40)return!1;let r=0,n=0;for(let s of t){let i=s.codePointAt(0)??0;i<32||i>=127&&i<=191||i===65533||i>=57344&&i<=63743?r+=1:/[\p{L}\p{N}]/u.test(s)&&(n+=1)}return r/t.length>.2||n/t.length<.25}function Bs(e){let t=e.toString("latin1").replace(/\s/g,"");t.startsWith("<~")&&(t=t.slice(2));let r=t.indexOf("~>");r>=0&&(t=t.slice(0,r));let n=[],s=0,i=0;for(let o of t){if(o==="z"&&i===0){n.push(0,0,0,0);continue}let a=o.charCodeAt(0)-33;if(a<0||a>84)return null;s=s*85+a,i+=1,i===5&&(n.push(s>>>24&255,s>>>16&255,s>>>8&255,s&255),s=0,i=0)}if(i>0){for(let a=i;a<5;a+=1)s=s*85+84;let o=[s>>>24&255,s>>>16&255,s>>>8&255,s&255];for(let a=0;a<i-1;a+=1)n.push(o[a]??0)}return Buffer.from(n)}function zs(e){let t=e.toString("latin1").replace(/\s/g,"").split(">")[0]??"",r=t.length%2?t+"0":t;return/^[0-9A-Fa-f]*$/.test(r)?Buffer.from(r,"hex"):null}function Ws(e){let t=/\/Filter\s*(\[[^\]]*\]|\/\w+)/.exec(e);return!t||!t[1]?[]:[...t[1].matchAll(/\/(\w+)/g)].map(r=>r[1]??"")}function je(e,t){if(!e.stream)return null;let r=e.stream;for(let n of Ws(e.dict)){let s=null;if(n==="FlateDecode")try{s=t!==void 0?Nn(r,{maxOutputLength:Math.max(1,t)}):Nn(r)}catch{return null}else if(n==="ASCII85Decode")s=Bs(r);else if(n==="ASCIIHexDecode")s=zs(r);else return null;if(s===null)return null;r=s}return r.toString("latin1")}function Gs(e){let t=new Map,r=1,n=/begincodespacerange([\s\S]*?)endcodespacerange/.exec(e);if(n&&n[1]){let c=/<([0-9A-Fa-f]+)>/.exec(n[1]);c&&c[1]&&c[1].length>=4&&(r=2)}let s=c=>{let l="";for(let p=0;p+3<c.length+1;p+=4){let d=parseInt(c.slice(p,p+4),16);Number.isFinite(d)&&d>0&&(l+=String.fromCharCode(d))}return l},i=/beginbfchar([\s\S]*?)endbfchar/g,o;for(;(o=i.exec(e))!==null;){let c=/<([0-9A-Fa-f]+)>\s*<([0-9A-Fa-f]*)>/g,l;for(;(l=c.exec(o[1]??""))!==null;)t.set(parseInt(l[1]??"0",16),s(l[2]??""))}let a=/beginbfrange([\s\S]*?)endbfrange/g;for(;(o=a.exec(e))!==null;){let c=o[1]??"",l=/<([0-9A-Fa-f]+)>\s*<([0-9A-Fa-f]+)>\s*<([0-9A-Fa-f]*)>/g,p;for(;(p=l.exec(c))!==null;){let d=parseInt(p[1]??"0",16),m=parseInt(p[2]??"0",16),f=parseInt((p[3]??"0").slice(0,4)||"0",16);if(!(m-d>65535))for(let g=d;g<=m;g+=1)t.set(g,String.fromCharCode(f+(g-d)))}}return{map:t,bytes:r}}function Vs(e){let t=new Map,r=[],n=[];for(let i of e.values()){for(let o of i.dict.matchAll(/\/Font\s*<<([\s\S]*?)>>/g))o[1]&&n.push(o[1]);for(let o of i.dict.matchAll(/\/Font\s+(\d+)\s+\d+\s+R/g)){let a=e.get(Number(o[1]));a&&n.push(a.dict)}}let s=new Set;for(let i of n){let o=/\/([^\s/<>[\]()]+)\s+(\d+)\s+\d+\s+R/g,a;for(;(a=o.exec(i))!==null;){let c=`${a[1]}#${a[2]}`;s.has(c)||(s.add(c),r.push([a[1]??"",Number(a[2])]))}}for(let[i,o]of r){let a=e.get(o);if(!a)continue;let c=null,l=/\/ToUnicode\s+(\d+)\s+\d+\s+R/.exec(a.dict);if(l){let d=e.get(Number(l[1])),m=d?je(d):null;m&&(c=Gs(m))}if(c||(c=Zs(a.dict,e)),!c)continue;let p=t.get(i)??[];p.push(c),t.set(i,p)}return t}var Xs=["alef","bet","gimel","dalet","he","vav","zayin","het","tet","yod","finalkaf","kaf","lamed","finalmem","mem","finalnun","nun","samekh","ayin","finalpe","pe","finaltsadi","tsadi","qof","resh","shin","tav"];function Ks(e){let t=/^uni([0-9A-Fa-f]{4})$/.exec(e)??/^u([0-9A-Fa-f]{4,6})$/.exec(e);if(t)return String.fromCodePoint(parseInt(t[1],16));let r=/^afii(\d{5})$/.exec(e);if(r){let i=Number(r[1]);if(i>=57664&&i<=57690)return String.fromCharCode(1488+(i-57664))}let n=Xs.indexOf(e.replace(/hebrew$/,""));return n>=0?String.fromCharCode(1488+n):e==="space"?" ":/^[A-Za-z]$/.test(e)?e:{zero:"0",one:"1",two:"2",three:"3",four:"4",five:"5",six:"6",seven:"7",eight:"8",nine:"9",period:".",comma:",",hyphen:"-",colon:":",slash:"/",at:"@"}[e]??null}function Zs(e,t){let r=e,n=/\/Encoding\s+(\d+)\s+\d+\s+R/.exec(e);n&&(r=t.get(Number(n[1]))?.dict??"");let s=/\/Differences\s*\[([^\]]*)\]/.exec(r);if(!s?.[1])return null;let i=new Map,o=0;for(let a of s[1].match(/\d+|\/[^\s/[\]]+/g)??[]){if(/^\d+$/.test(a)){o=Number(a);continue}let c=Ks(a.slice(1));c!==null&&i.set(o,c),o+=1}return i.size?{map:i,bytes:1}:null}function Hn(e){let t=[];for(let r=0;r<e.length;r+=1){let n=e[r];if(n!=="\\"){t.push(n.charCodeAt(0)&255);continue}let s=e[r+1];if(s===void 0)break;if(s>="0"&&s<="7"){let o="",a=r+1;for(;a<e.length&&o.length<3&&e[a]>="0"&&e[a]<="7";)o+=e[a],a+=1;t.push(parseInt(o,8)&255),r=a-1;continue}let i={n:10,r:13,t:9,b:8,f:12};t.push(i[s]??s.charCodeAt(0)&255),r+=1}return t}function Un(e){if(e.length<2||e[0]!==254||e[1]!==255)return null;let t="";for(let r=2;r+1<e.length;r+=2)t+=String.fromCharCode((e[r]??0)<<8|(e[r+1]??0));return t}function Dn(e,t){let r=Un(e);if(r!==null)return r;if(!t)return e.map(s=>String.fromCharCode(s)).join("");let n="";if(t.bytes===2)for(let s=0;s+1<e.length;s+=2){let i=(e[s]??0)<<8|(e[s+1]??0);n+=t.map.get(i)??""}else for(let s of e)n+=t.map.get(s)??String.fromCharCode(s);return n}function Ys(e){let t=0;for(let r of e){let n=r.codePointAt(0)??0;/[\p{L}\p{N}]/u.test(r)?t+=1:(n<32||n>=127&&n<=191||n===65533)&&(t-=2)}return t}function Fn(e,t){if(!t||t.length<=1)return Dn(e,t?.[0]);let r="",n=-1/0;for(let s of t){let i=Dn(e,s),o=Ys(i);o>n&&(r=i,n=o)}return r}function Js(e,t){let r="",n="",s,i=!1,o="",a=0,c=null,l=()=>{n.trim()&&(r+=n+`
4
- `),n="",a=0},p=()=>{n&&!n.endsWith(" ")&&a>1&&(n+=" ")},d=/\/([^\s/<>[\]()]+)\s+-?[\d.]+\s+Tf|(-?[\d.]+)\s+(-?[\d.]+)\s+T[dD]\b|(?:-?[\d.]+\s+){5}(-?[\d.]+)\s+Tm\b|T\*|\((?:\\.|[^\\)])*\)|<[0-9A-Fa-f\s]*>|\[|\]|-?\d+(?:\.\d+)?|TJ|Tj|'|"/g,m;for(;(m=d.exec(e))!==null;){let f=m[0];if(m[1]!==void 0&&f.endsWith("Tf")){s=t.get(m[1]);continue}if(m[2]!==void 0){Math.abs(Number(m[3]))>.01?l():Number(m[2])!==0&&p();continue}if(m[4]!==void 0){let g=Number(m[4]);c!==null&&Math.abs(g-c)>.01?l():c!==null&&p(),c=g;continue}if(f==="T*"){l();continue}if(f==="["){i=!0;continue}if(f==="]"){i=!1;continue}if(f==="TJ"||f==="Tj"||f==="'"||f==='"'){(f==="'"||f==='"')&&l(),o&&(n+=o,a=o.trim().length,o="");continue}if(f.startsWith("("))o+=Fn(Hn(f.slice(1,-1)),s);else if(f.startsWith("<")){let g=f.slice(1,-1).replace(/\s+/g,""),u=[];for(let y=0;y+1<g.length;y+=2)u.push(parseInt(g.slice(y,y+2),16));o+=Fn(u,s)}else i&&Number(f)<-200&&o&&!o.endsWith(" ")&&(o+=" ")}return o&&(n+=o),l(),r}function qs(e,t){let r=e.toString("latin1"),n=/\/Info\s+(\d+)\s+\d+\s+R/.exec(r),s=n?t.get(Number(n[1]))?.dict:void 0;if(!s)return"";let i=[],o=/\/(Author|Title|Subject|Keywords|Creator|Producer)\s*(\((?:\\.|[^\\)])*\)|<[0-9A-Fa-f\s]*>)/g,a;for(;(a=o.exec(s))!==null;){let c=a[2]??"";if(c.startsWith("(")){let l=Hn(c.slice(1,-1));i.push(Un(l)??l.map(p=>String.fromCharCode(p)).join(""))}else{let l=c.slice(1,-1).replace(/\s+/g,""),p="";if(l.toUpperCase().startsWith("FEFF"))for(let d=4;d+3<l.length+1;d+=4)p+=String.fromCharCode(parseInt(l.slice(d,d+4),16));else for(let d=0;d+1<l.length;d+=2)p+=String.fromCharCode(parseInt(l.slice(d,d+2),16));i.push(p)}}return i.join(`
5
- `)}var jn="\u05DD\u05DF\u05E5\u05E3\u05DA";function Me(e){let t=0,r=0;for(let n of e.match(/[\u05D0-\u05EA]{2,}/g)??[])jn.includes(n[0])&&(t+=1),jn.includes(n[n.length-1])&&(r+=1);return t>=3&&t>r*2}var Qs={"(":")",")":"(","[":"]","]":"[","<":">",">":"<","{":"}","}":"{"};function He(e){return/[\u05D0-\u05EA]/.test(e)?[...e].reverse().map(r=>Qs[r]??r).join("").replace(/[A-Za-z0-9](?:[A-Za-z0-9@._\-/:+]*[A-Za-z0-9])?/g,r=>[...r].reverse().join("")):e}function $t(e){if(!e.subarray(0,8).toString("latin1").startsWith("%PDF-")||e.toString("latin1",0,Math.min(e.length,4096)).includes("/Encrypt"))return null;let r=Mn(e);if(r.size===0)return null;let n=Vs(r),s=[];s.push(qs(e,r));let i=0,o=0,a=!1;for(let l of r.values()){if(!l.stream||!/\/Subtype\s*\/Form\b/.test(l.dict)&&/\/Subtype|\/Type\s*\/(XObject|Font|Metadata|ObjStm|XRef)|\/FontFile/.test(l.dict))continue;let d=je(l);if(d===null||!/(TJ|Tj)\b/.test(d))continue;let m=Js(d,n);if(m.trim().length!==0){if(o+=1,i+m.length>On){s.push(m.slice(0,Math.max(0,On-i))),a=!0;break}s.push(m),i+=m.length}}if(o===0)return null;let c=s.slice(1).join(`
6
- `);return At(c)?null:(Me(c)&&(c=c.split(`
7
- `).map(He).join(`
1
+ /*! @nodatachat/mcp 1.6.23 | Copyright 2026 Capsule Ltd. | FSL-1.1-ALv2 | see LICENSE.md */
2
+ import{appendFileSync as Za,copyFileSync as Cp,existsSync as Sn,mkdirSync as ds,readdirSync as Ya,readFileSync as En,statSync as yt,writeFileSync as Ja}from"node:fs";import{homedir as K}from"node:os";import{basename as bt,extname as us,isAbsolute as te,join as _e,relative as fs,resolve as D}from"node:path";import{TextDecoder as kr}from"node:util";var M={text:[],header:[],secrets:[],table:null,amounts:null,severity:null};function St(e){e.table&&(M.table=e.table),e.severity&&(M.severity=e.severity),e.amounts&&(M.amounts=e.amounts);for(let t of e.text??[])M.text.some(r=>r.kind===t.kind)||M.text.push(t);e.header&&!M.header.includes(e.header)&&M.header.push(e.header);for(let t of e.secrets??[])M.secrets.some(r=>r.id===t.id)||M.secrets.push(t)}function Et(){return M.amounts?.()===!0}function Oe(){return M.text}function Nn(){return M.header}function ve(){return M.table}function On(){return M.secrets}var De=[{id:"aws-access-key",name:"AWS Access Key",pattern:/(?:^|[^A-Z0-9])AKIA(?!X{16})[A-Z2-7]{16}(?:[^A-Z2-7]|$)/,severity:"critical"},{id:"aws-secret-key",name:"AWS Secret Key",pattern:/(?:aws_secret_access_key|aws_secret_key|secret_access_key)\s*[=:]\s*['"]?[A-Za-z0-9/+=]{40}['"]?/,severity:"critical"},{id:"gcp-api-key",name:"GCP API Key",pattern:/AIza[0-9A-Za-z_-]{35}/,severity:"critical"},{id:"gcp-service-account",name:"GCP Service Account",pattern:/"type"\s*:\s*"service_account"/,severity:"critical"},{id:"github-token",name:"GitHub Token",pattern:/gh[pousr]_[0-9a-zA-Z]{36,}/,severity:"critical"},{id:"github-fine-grained",name:"GitHub Fine-Grained Token",pattern:/github_pat_[0-9a-zA-Z_]{22,}/,severity:"critical"},{id:"gitlab-token",name:"GitLab Token",pattern:/glpat-[0-9a-zA-Z_-]{20,}/,severity:"critical"},{id:"stripe-secret",name:"Stripe Secret Key",pattern:/sk_live_[0-9a-zA-Z]{24,}/,severity:"critical"},{id:"stripe-restricted",name:"Stripe Restricted Key",pattern:/rk_live_[0-9a-zA-Z]{24,}/,severity:"critical"},{id:"slack-token",name:"Slack Token",pattern:/xox[baprs]-[0-9a-zA-Z-]{10,}/,severity:"high"},{id:"slack-webhook",name:"Slack Webhook",pattern:/hooks\.slack\.com\/services\/T[0-9A-Z]{8,}\/B[0-9A-Z]{8,}\/[0-9a-zA-Z]{24}/,severity:"high"},{id:"twilio-api-key",name:"Twilio API Key",pattern:/SK[0-9a-fA-F]{32}/,severity:"high"},{id:"sendgrid-api-key",name:"SendGrid API Key",pattern:/SG\.[0-9a-zA-Z_-]{22}\.[0-9a-zA-Z_-]{43}/,severity:"critical"},{id:"postgres-uri",name:"PostgreSQL Connection String",pattern:/postgres(?:ql)?:\/\/[^\s'"]{10,}/,severity:"critical"},{id:"mongodb-uri",name:"MongoDB Connection String",pattern:/mongodb(?:\+srv)?:\/\/[^\s'"]{10,}/,severity:"critical"},{id:"redis-uri",name:"Redis Connection String",pattern:/redis(?:s)?:\/\/[^\s'"]{10,}/,severity:"high"},{id:"openai-key",name:"OpenAI API Key",pattern:/sk-[0-9a-zA-Z]{20,}T3BlbkFJ[0-9a-zA-Z]{20,}/,severity:"critical"},{id:"openai-project-key",name:"OpenAI API Key",pattern:/sk-(?:proj|svcacct|admin)-[0-9A-Za-z_-]{40,}/,severity:"critical"},{id:"anthropic-key",name:"Anthropic API Key",pattern:/sk-ant-[0-9a-zA-Z_-]{40,}/,severity:"critical"},{id:"firebase-key",name:"Firebase API Key",pattern:/AIza[0-9A-Za-z_-]{35}/,severity:"high"},{id:"supabase-key",name:"Supabase Service Key",pattern:/eyJ[0-9a-zA-Z_-]{100,}/,severity:"critical"},{id:"supabase-access-token",name:"Supabase Access Token",pattern:/\bsbp_[0-9a-f]{40}\b/,severity:"critical"},{id:"supabase-secret-key",name:"Supabase Secret Key",pattern:/\bsb_secret_[0-9A-Za-z_-]{20,}/,severity:"critical"},{id:"private-key",name:"Private Key",pattern:/-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/,severity:"critical"},{id:"jwt-secret",name:"JWT/Generic Secret",pattern:/(?:jwt_secret|JWT_SECRET|secret_key|SECRET_KEY|api_secret|API_SECRET)\s*[=:]\s*['"][^'"]{8,}['"]/,severity:"high"},{id:"password-in-code",name:"Password in Code",pattern:/(?:password|passwd|pwd)\s*[=:]\s*['"][^'"]{8,}['"]/,severity:"high"},{id:"bearer-token",name:"Bearer Token in Code",pattern:/['"]Bearer\s+[0-9a-zA-Z._-]{20,}['"]/,severity:"high"}];function Se(){let e=On().filter(t=>!De.some(r=>r.id===t.id));return[...De,...e]}var Us=[{pattern:/^(full_?name|first_?name|last_?name|spouse_?name|beneficiary_?name)$/i,type:"name",label:"Person name"},{pattern:/^(email|e_?mail|email_?address)$/i,type:"email",label:"Email address"},{pattern:/^(phone|mobile|telephone|phone_?number|cell_?phone)$/i,type:"phone",label:"Phone number"},{pattern:/^(id_?number|identity|ssn|social_?security|national_?id|teudat_?zehut)$/i,type:"id",label:"ID number"},{pattern:/^(address|street_?address|home_?address)$/i,type:"address",label:"Address"},{pattern:/^(date_?of_?birth|dob|birth_?date|birthday)$/i,type:"dob",label:"Date of birth"},{pattern:/^(bank_?account|iban|account_?number|bank_?details|routing_?number)$/i,type:"financial",label:"Bank account"},{pattern:/^(credit_?card|card_?number|cvv|cc_?number)$/i,type:"financial",label:"Credit card"},{pattern:/^(salary|income|commission|premium|compensation)$/i,type:"financial",label:"Salary / income"},{pattern:/^(medical_?info|health_?conditions|diagnosis|medication|prescription)$/i,type:"medical",label:"Medical"},{pattern:/^(passport|passport_?number|passport_?id)$/i,type:"id",label:"Passport"},{pattern:/^(driver_?license|drivers_?license|dl_?number)$/i,type:"id",label:"Driver license"},{pattern:/^(tax_?id|tin|vat_?number|ein)$/i,type:"financial",label:"Tax ID"},{pattern:/^(insurance_?number|policy_?number|member_?id)$/i,type:"id",label:"Insurance/Policy"},{pattern:/^(biometric|fingerprint|face_?id|retina)$/i,type:"biometric",label:"Biometric"},{pattern:/^(latitude|longitude|lat|lng|geo_?location|coordinates)$/i,type:"location",label:"Geolocation"}],Bs=[{pattern:/^(?:שם|שם_מלא|שם פרטי|שם_פרטי|שם משפחה|שם_משפחה|שם הלקוח|שם בן זוג|שם המבוטח|שם המוטב|שם הילד|שם הקטין)$/i,type:"name",label:"\u05E9\u05DD \u05D0\u05D3\u05DD"},{pattern:/^(?:ת"ז|ת\.ז|ת ז|תז|תעודת זהות|תעודת_זהות|מספר זהות|מס' זהות|teudat_zehut|tz|israeli_id|il_id)$/i,type:"id",label:"\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA"},{pattern:/^(?:דרכון|מספר דרכון|רישיון נהיגה|רישיון_נהיגה|רשיון נהיגה)$/i,type:"id",label:"\u05D3\u05E8\u05DB\u05D5\u05DF/\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF"},{pattern:/^(?:מייל|דוא"ל|דוא_ל|דואר אלקטרוני|אימייל|כתובת מייל)$/i,type:"email",label:"\u05D3\u05D5\u05D0\u05E8 \u05D0\u05DC\u05E7\u05D8\u05E8\u05D5\u05E0\u05D9"},{pattern:/^(?:טלפון|טל'|נייד|פלאפון|סלולרי|מספר טלפון|טלפון נייד)$/i,type:"phone",label:"\u05DE\u05E1\u05E4\u05E8 \u05D8\u05DC\u05E4\u05D5\u05DF"},{pattern:/^(?:כתובת|כתובת מגורים|רחוב|מס בית|עיר|ישוב|יישוב|מיקוד|כתובת מלאה|מען)$/i,type:"address",label:"\u05DB\u05EA\u05D5\u05D1\u05EA"},{pattern:/^(?:תאריך לידה|ת לידה|תאריך הולדת|יום הולדת|גיל)$/i,type:"dob",label:"\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4"},{pattern:/^(?:חשבון בנק|מספר חשבון|מס חשבון|סניף|iban|iban_il)$/i,type:"financial",label:"\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7"},{pattern:/^(?:כרטיס אשראי|מספר אשראי|cvv|אשראי)$/i,type:"financial",label:"\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9"},{pattern:/^(?:שכר|משכורת|הכנסה|פרמיה|שכר ברוטו|שכר נטו|תגמול|בונוס|פיצוי)$/i,type:"financial",label:"\u05E9\u05DB\u05E8/\u05D4\u05DB\u05E0\u05E1\u05D4"},{pattern:/^(?:אבחון|אבחנה|מחלה|תרופה|מרשם|בדיקה רפואית|מצב רפואי|חיסון|רגישות|אלרגיה|סוג דם)$/i,type:"medical",label:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9"},{pattern:/^(?:מספר פוליסה|מס פוליסה|פוליסה|מספר חבר|מספר ביטוח)$/i,type:"id",label:"\u05E4\u05D5\u05DC\u05D9\u05E1\u05D4/\u05D7\u05D1\u05E8\u05D5\u05EA"},{pattern:/^(?:שם הילד|תעודת זהות של ילד|ילדים|קטין|מספר ילדים|תעודת לידה)$/i,type:"minor_data",label:"\u05DE\u05D9\u05D3\u05E2 \u05E2\u05DC \u05E7\u05D8\u05D9\u05DF"},{pattern:/^(?:דת|לאום|מין|נטייה מינית|השקפה פוליטית|מצב משפחתי|עדה|מוצא)$/i,type:"sensitive_personal",label:"\u05DE\u05D9\u05D3\u05E2 \u05D0\u05D9\u05E9\u05D9 \u05E8\u05D2\u05D9\u05E9"},{pattern:/^(?:מספר רכב|מס רכב|לוחית רישוי|מספר רישוי)$/i,type:"tracking",label:"\u05DE\u05E1\u05E4\u05E8 \u05E8\u05DB\u05D1"}],zs=/^(id|uuid|created_?at|updated_?at|deleted_?at|status|type|category|description|title|slug|url|path|key|value|enabled|active|public|version|metadata|config|settings|data|content|note|comment|label|color|icon)$/i,Ws=/^שם[ _](?:ה)?(?:קובץ|מוצר|פריט|חברה|ארגון|עסק|פרויקט|גיליון|טבלה|שדה|קטגוריה|סניף|בנק|עיר|רחוב|ישוב|יישוב|מסמך|תוכנית|חבילה|קורס|מחלקה|אתר|דומיין|מותג|ספק|שירות|תפקיד)$|^(file|product|item|company|org|organization|project|sheet|table|field|category|branch|bank|city|street|document|plan|course|department|site|domain|brand|vendor|service|role)[ _-]?name$/i;function Ee(e){if(!e)return null;let t=e.trim();if(zs.test(t)||/^name$/i.test(t)||/^\[[A-Z_]+(?:-\d+)?\]$/.test(t))return null;let r=t.replace(/[\s-]+/g,"_");for(let n of[...Bs,...Us])if(n.pattern.test(t)||n.pattern.test(r))return{type:n.type,label:n.label};if(Ws.test(t))return null;if(/^שם[ _][\u0590-\u05FF"'׳ ]{2,20}$/.test(t))return{type:"name",label:"\u05E9\u05DD \u05D0\u05D3\u05DD"};if(/^(customer|client|employee|inspector|supervisor|contact|person|patient|user|owner|manager|agent|member|driver|tenant|student|parent|beneficiary|insured)_?(full_?)?name$/i.test(r))return{type:"name",label:"Person name"};for(let n of Nn()){let s=n(t);if(s)return{type:s.type,label:s.label}}return null}function Dn(e){let t=String(e??"").replace(/\D/g,"");if(t.length===0||t.length>9)return!1;let r=t.padStart(9,"0"),n=0;for(let s=0;s<9;s++){let i=parseInt(r[s]??"0",10)*(s%2+1);i>9&&(i-=9),n+=i}return n%10===0&&parseInt(r,10)>0}function Gs(e){let t=String(e??"").replace(/\D/g,"");if(t.length<12||t.length>19)return!1;let r=0,n=!1;for(let s=t.length-1;s>=0;s-=1){let i=parseInt(t[s]??"0",10);n&&(i*=2,i>9&&(i-=9)),r+=i,n=!n}return r%10===0}function Fn(e){let t=String(e??"").replace(/\s/g,"").toUpperCase();if(!/^[A-Z]{2}\d{2}[A-Z0-9]{10,30}$/.test(t))return!1;let r=t.slice(4)+t.slice(0,4),n=0;for(let s of r){let i=s>="A"&&s<="Z"?String(s.charCodeAt(0)-55):s;for(let o of i)n=(n*10+Number(o))%97}return n===1}var At="(?<!\\d)(?<!\\d[.,])",$t="(?!\\d)(?![.,]\\d)",Rt=[{subkind:"israeli_id",severity:"high",pattern:new RegExp(`${At}(?:\\d{8}-\\d|\\d{9})${$t}`,"g"),validate:Dn,hint:"Israeli national ID (check digit verified) in plaintext. Encrypt the column or mask it at rest."},{subkind:"credit_card",severity:"critical",pattern:new RegExp(`${At}[2-6][ -]?(?:\\d[ -]?){11,17}\\d${$t}`,"g"),validate:Gs,hint:"Payment card number (Luhn verified) in plaintext. This is PCI scope."},{subkind:"iban",severity:"high",pattern:/\b[A-Z]{2}\d{2}(?: ?[A-Z0-9]{4}){2,7}(?: ?[A-Z0-9]{1,4})?\b/g,validate:Fn,hint:"Bank account in IBAN form (mod-97 verified) in plaintext."},{subkind:"israeli_phone",severity:"medium",pattern:new RegExp(`${At}(?:\\+972[- ]?|0)(?:[57]\\d|[2-489])[- ]?\\d{3}[- ]?\\d{4}${$t}`,"g"),validate:e=>{let t=e.replace(/\D/g,"").replace(/^972/,"0");return/^0[57]\d{8}$/.test(t)?!0:/^0[2-489]\d{7}$/.test(t)&&(/[- ]/.test(e)||e.startsWith("+972"))},hint:"Israeli phone number in plaintext."}];function Fe(e,t){let r=[],n="",s=!1;for(let i=0;i<e.length;i++){let o=e[i];s?o==='"'&&e[i+1]==='"'?(n+='"',i++):o==='"'?s=!1:n+=o:o==='"'?s=!0:o===t?(r.push(n),n=""):n+=o}return r.push(n),r}import{inflateRawSync as Hi}from"node:zlib";import{inflateSync as Mn}from"node:zlib";var Me=new Set([".pdf"]),jn=8*1024*1024;function zn(e){let t=e.toString("latin1"),r=new Map,n=/(\d+)\s+(\d+)\s+obj\b/g,s;for(;(s=n.exec(t))!==null;){let i=Number(s[1]),o=n.lastIndex,a=t.indexOf("endobj",o);if(a<0)continue;let c=t.indexOf("stream",o),l,f=null;if(c>=0&&c<a){l=t.slice(o,c);let d=c+6;t[d]==="\r"&&(d+=1),t[d]===`
3
+ `&&(d+=1);let h=t.indexOf("endstream",d);h>d&&(f=e.subarray(d,h))}else l=t.slice(o,a);r.set(i,{num:i,dict:l,stream:f})}for(let i of[...r.values()]){if(!i.stream||!/\/Type\s*\/ObjStm\b/.test(i.dict))continue;let o=je(i),a=Number(/\/N\s+(\d+)/.exec(i.dict)?.[1]??0),c=Number(/\/First\s+(\d+)/.exec(i.dict)?.[1]??-1);if(o===null||!a||c<0)continue;let l=o.slice(0,c).trim().split(/\s+/).map(Number);for(let f=0;f<a;f+=1){let d=l[2*f],h=l[2*f+1];if(d===void 0||h===void 0||Number.isNaN(d)||Number.isNaN(h))break;let p=f+1<a?l[2*(f+1)+1]:void 0,g=o.slice(c+h,p!==void 0?c+p:void 0);r.has(d)||r.set(d,{num:d,dict:g,stream:null})}}return r}function Tt(e){let t=[...e.replace(/\s+/g,"")];if(t.length<40)return!1;let r=0,n=0;for(let s of t){let i=s.codePointAt(0)??0;i<32||i>=127&&i<=191||i===65533||i>=57344&&i<=63743?r+=1:/[\p{L}\p{N}]/u.test(s)&&(n+=1)}return r/t.length>.2||n/t.length<.25}function Vs(e){let t=e.toString("latin1").replace(/\s/g,"");t.startsWith("<~")&&(t=t.slice(2));let r=t.indexOf("~>");r>=0&&(t=t.slice(0,r));let n=[],s=0,i=0;for(let o of t){if(o==="z"&&i===0){n.push(0,0,0,0);continue}let a=o.charCodeAt(0)-33;if(a<0||a>84)return null;s=s*85+a,i+=1,i===5&&(n.push(s>>>24&255,s>>>16&255,s>>>8&255,s&255),s=0,i=0)}if(i>0){for(let a=i;a<5;a+=1)s=s*85+84;let o=[s>>>24&255,s>>>16&255,s>>>8&255,s&255];for(let a=0;a<i-1;a+=1)n.push(o[a]??0)}return Buffer.from(n)}function Xs(e){let t=e.toString("latin1").replace(/\s/g,"").split(">")[0]??"",r=t.length%2?t+"0":t;return/^[0-9A-Fa-f]*$/.test(r)?Buffer.from(r,"hex"):null}function Ks(e){let t=/\/Filter\s*(\[[^\]]*\]|\/\w+)/.exec(e);return!t||!t[1]?[]:[...t[1].matchAll(/\/(\w+)/g)].map(r=>r[1]??"")}function je(e,t){if(!e.stream)return null;let r=e.stream;for(let n of Ks(e.dict)){let s=null;if(n==="FlateDecode")try{s=t!==void 0?Mn(r,{maxOutputLength:Math.max(1,t)}):Mn(r)}catch{return null}else if(n==="ASCII85Decode")s=Vs(r);else if(n==="ASCIIHexDecode")s=Xs(r);else return null;if(s===null)return null;r=s}return r.toString("latin1")}function Zs(e){let t=new Map,r=1,n=/begincodespacerange([\s\S]*?)endcodespacerange/.exec(e);if(n&&n[1]){let c=/<([0-9A-Fa-f]+)>/.exec(n[1]);c&&c[1]&&c[1].length>=4&&(r=2)}let s=c=>{let l="";for(let f=0;f+3<c.length+1;f+=4){let d=parseInt(c.slice(f,f+4),16);Number.isFinite(d)&&d>0&&(l+=String.fromCharCode(d))}return l},i=/beginbfchar([\s\S]*?)endbfchar/g,o;for(;(o=i.exec(e))!==null;){let c=/<([0-9A-Fa-f]+)>\s*<([0-9A-Fa-f]*)>/g,l;for(;(l=c.exec(o[1]??""))!==null;)t.set(parseInt(l[1]??"0",16),s(l[2]??""))}let a=/beginbfrange([\s\S]*?)endbfrange/g;for(;(o=a.exec(e))!==null;){let c=o[1]??"",l=/<([0-9A-Fa-f]+)>\s*<([0-9A-Fa-f]+)>\s*<([0-9A-Fa-f]*)>/g,f;for(;(f=l.exec(c))!==null;){let d=parseInt(f[1]??"0",16),h=parseInt(f[2]??"0",16),p=parseInt((f[3]??"0").slice(0,4)||"0",16);if(!(h-d>65535))for(let g=d;g<=h;g+=1)t.set(g,String.fromCharCode(p+(g-d)))}}return{map:t,bytes:r}}function Ys(e){let t=new Map,r=[],n=[];for(let i of e.values()){for(let o of i.dict.matchAll(/\/Font\s*<<([\s\S]*?)>>/g))o[1]&&n.push(o[1]);for(let o of i.dict.matchAll(/\/Font\s+(\d+)\s+\d+\s+R/g)){let a=e.get(Number(o[1]));a&&n.push(a.dict)}}let s=new Set;for(let i of n){let o=/\/([^\s/<>[\]()]+)\s+(\d+)\s+\d+\s+R/g,a;for(;(a=o.exec(i))!==null;){let c=`${a[1]}#${a[2]}`;s.has(c)||(s.add(c),r.push([a[1]??"",Number(a[2])]))}}for(let[i,o]of r){let a=e.get(o);if(!a)continue;let c=null,l=/\/ToUnicode\s+(\d+)\s+\d+\s+R/.exec(a.dict);if(l){let d=e.get(Number(l[1])),h=d?je(d):null;h&&(c=Zs(h))}if(c||(c=Qs(a.dict,e)),!c)continue;let f=t.get(i)??[];f.push(c),t.set(i,f)}return t}var Js=["alef","bet","gimel","dalet","he","vav","zayin","het","tet","yod","finalkaf","kaf","lamed","finalmem","mem","finalnun","nun","samekh","ayin","finalpe","pe","finaltsadi","tsadi","qof","resh","shin","tav"];function qs(e){let t=/^uni([0-9A-Fa-f]{4})$/.exec(e)??/^u([0-9A-Fa-f]{4,6})$/.exec(e);if(t)return String.fromCodePoint(parseInt(t[1],16));let r=/^afii(\d{5})$/.exec(e);if(r){let i=Number(r[1]);if(i>=57664&&i<=57690)return String.fromCharCode(1488+(i-57664))}let n=Js.indexOf(e.replace(/hebrew$/,""));return n>=0?String.fromCharCode(1488+n):e==="space"?" ":/^[A-Za-z]$/.test(e)?e:{zero:"0",one:"1",two:"2",three:"3",four:"4",five:"5",six:"6",seven:"7",eight:"8",nine:"9",period:".",comma:",",hyphen:"-",colon:":",slash:"/",at:"@"}[e]??null}function Qs(e,t){let r=e,n=/\/Encoding\s+(\d+)\s+\d+\s+R/.exec(e);n&&(r=t.get(Number(n[1]))?.dict??"");let s=/\/Differences\s*\[([^\]]*)\]/.exec(r);if(!s?.[1])return null;let i=new Map,o=0;for(let a of s[1].match(/\d+|\/[^\s/[\]]+/g)??[]){if(/^\d+$/.test(a)){o=Number(a);continue}let c=qs(a.slice(1));c!==null&&i.set(o,c),o+=1}return i.size?{map:i,bytes:1}:null}function Wn(e){let t=[];for(let r=0;r<e.length;r+=1){let n=e[r];if(n!=="\\"){t.push(n.charCodeAt(0)&255);continue}let s=e[r+1];if(s===void 0)break;if(s>="0"&&s<="7"){let o="",a=r+1;for(;a<e.length&&o.length<3&&e[a]>="0"&&e[a]<="7";)o+=e[a],a+=1;t.push(parseInt(o,8)&255),r=a-1;continue}let i={n:10,r:13,t:9,b:8,f:12};t.push(i[s]??s.charCodeAt(0)&255),r+=1}return t}function Gn(e){if(e.length<2||e[0]!==254||e[1]!==255)return null;let t="";for(let r=2;r+1<e.length;r+=2)t+=String.fromCharCode((e[r]??0)<<8|(e[r+1]??0));return t}function Hn(e,t){let r=Gn(e);if(r!==null)return r;if(!t)return e.map(s=>String.fromCharCode(s)).join("");let n="";if(t.bytes===2)for(let s=0;s+1<e.length;s+=2){let i=(e[s]??0)<<8|(e[s+1]??0);n+=t.map.get(i)??""}else for(let s of e)n+=t.map.get(s)??String.fromCharCode(s);return n}function ei(e){let t=0;for(let r of e){let n=r.codePointAt(0)??0;/[\p{L}\p{N}]/u.test(r)?t+=1:(n<32||n>=127&&n<=191||n===65533)&&(t-=2)}return t}function Un(e,t){if(!t||t.length<=1)return Hn(e,t?.[0]);let r="",n=-1/0;for(let s of t){let i=Hn(e,s),o=ei(i);o>n&&(r=i,n=o)}return r}function ti(e,t){let r="",n="",s,i=!1,o="",a=0,c=null,l=()=>{n.trim()&&(r+=n+`
4
+ `),n="",a=0},f=()=>{n&&!n.endsWith(" ")&&a>1&&(n+=" ")},d=/\/([^\s/<>[\]()]+)\s+-?[\d.]+\s+Tf|(-?[\d.]+)\s+(-?[\d.]+)\s+T[dD]\b|(?:-?[\d.]+\s+){5}(-?[\d.]+)\s+Tm\b|T\*|\((?:\\.|[^\\)])*\)|<[0-9A-Fa-f\s]*>|\[|\]|-?\d+(?:\.\d+)?|TJ|Tj|'|"/g,h;for(;(h=d.exec(e))!==null;){let p=h[0];if(h[1]!==void 0&&p.endsWith("Tf")){s=t.get(h[1]);continue}if(h[2]!==void 0){Math.abs(Number(h[3]))>.01?l():Number(h[2])!==0&&f();continue}if(h[4]!==void 0){let g=Number(h[4]);c!==null&&Math.abs(g-c)>.01?l():c!==null&&f(),c=g;continue}if(p==="T*"){l();continue}if(p==="["){i=!0;continue}if(p==="]"){i=!1;continue}if(p==="TJ"||p==="Tj"||p==="'"||p==='"'){(p==="'"||p==='"')&&l(),o&&(n+=o,a=o.trim().length,o="");continue}if(p.startsWith("("))o+=Un(Wn(p.slice(1,-1)),s);else if(p.startsWith("<")){let g=p.slice(1,-1).replace(/\s+/g,""),u=[];for(let y=0;y+1<g.length;y+=2)u.push(parseInt(g.slice(y,y+2),16));o+=Un(u,s)}else i&&Number(p)<-200&&o&&!o.endsWith(" ")&&(o+=" ")}return o&&(n+=o),l(),r}function ni(e,t){let r=e.toString("latin1"),n=/\/Info\s+(\d+)\s+\d+\s+R/.exec(r),s=n?t.get(Number(n[1]))?.dict:void 0;if(!s)return"";let i=[],o=/\/(Author|Title|Subject|Keywords|Creator|Producer)\s*(\((?:\\.|[^\\)])*\)|<[0-9A-Fa-f\s]*>)/g,a;for(;(a=o.exec(s))!==null;){let c=a[2]??"";if(c.startsWith("(")){let l=Wn(c.slice(1,-1));i.push(Gn(l)??l.map(f=>String.fromCharCode(f)).join(""))}else{let l=c.slice(1,-1).replace(/\s+/g,""),f="";if(l.toUpperCase().startsWith("FEFF"))for(let d=4;d+3<l.length+1;d+=4)f+=String.fromCharCode(parseInt(l.slice(d,d+4),16));else for(let d=0;d+1<l.length;d+=2)f+=String.fromCharCode(parseInt(l.slice(d,d+2),16));i.push(f)}}return i.join(`
5
+ `)}var Bn="\u05DD\u05DF\u05E5\u05E3\u05DA";function He(e){let t=0,r=0;for(let n of e.match(/[\u05D0-\u05EA]{2,}/g)??[])Bn.includes(n[0])&&(t+=1),Bn.includes(n[n.length-1])&&(r+=1);return t>=3&&t>r*2}var ri={"(":")",")":"(","[":"]","]":"[","<":">",">":"<","{":"}","}":"{"};function Ue(e){return/[\u05D0-\u05EA]/.test(e)?[...e].reverse().map(r=>ri[r]??r).join("").replace(/[A-Za-z0-9](?:[A-Za-z0-9@._\-/:+]*[A-Za-z0-9])?/g,r=>[...r].reverse().join("")):e}function It(e){if(!e.subarray(0,8).toString("latin1").startsWith("%PDF-")||e.toString("latin1",0,Math.min(e.length,4096)).includes("/Encrypt"))return null;let r=zn(e);if(r.size===0)return null;let n=Ys(r),s=[];s.push(ni(e,r));let i=0,o=0,a=!1;for(let l of r.values()){if(!l.stream||!/\/Subtype\s*\/Form\b/.test(l.dict)&&/\/Subtype|\/Type\s*\/(XObject|Font|Metadata|ObjStm|XRef)|\/FontFile/.test(l.dict))continue;let d=je(l);if(d===null||!/(TJ|Tj)\b/.test(d))continue;let h=ti(d,n);if(h.trim().length!==0){if(o+=1,i+h.length>jn){s.push(h.slice(0,Math.max(0,jn-i))),a=!0;break}s.push(h),i+=h.length}}if(o===0)return null;let c=s.slice(1).join(`
6
+ `);return Tt(c)?null:(He(c)&&(c=c.split(`
7
+ `).map(Ue).join(`
8
8
  `)),{text:[s[0]??"",c].join(`
9
- `),truncated:a,streams:o})}var hl=64*1024*1024;function Bn(e){if(!e.subarray(0,8).toString("latin1").startsWith("%PDF-"))return"not a valid PDF";if(e.toString("latin1",0,Math.min(e.length,4096)).includes("/Encrypt"))return"encrypted (password or copy protection)";let r=Mn(e),n=0,s=0,i=0;for(let o of r.values()){if(!o.stream)continue;if(/\/Subtype\s*\/Image\b/.test(o.dict)){s+=1;continue}let a=je(o);if(a===null){/\/Type\s*\/(Font|Metadata|XRef)|\/FontFile|\/Length1/.test(o.dict)||(i+=1);continue}/(TJ|Tj)\b/.test(a)&&(n+=1)}return n===0&&s>0?"no text layer \u2014 a scanned image (needs OCR, which NoData does not do)":n===0&&i>0?"its pages are compressed in a way NoData cannot open":n===0?"no text in it":"its fonts have no usable letter map \u2014 the text decodes to symbols"}import{execFileSync as ei}from"node:child_process";import{existsSync as ti,mkdtempSync as ni,readFileSync as Wn,readdirSync as ze,rmSync as ri,statSync as si,writeFileSync as Gn}from"node:fs";import{tmpdir as ii}from"node:os";import{delimiter as oi,join as O}from"node:path";var ce="install the free tools once (they run only on this computer): winget install oschwartz10612.Poppler and winget install UB-Mannheim.TesseractOCR (tick Hebrew in its installer)",Ue=null;function zn(e){try{return si(e).isFile()}catch{return!1}}function ai(){let e=[],t=[process.env.ProgramFiles,process.env["ProgramFiles(x86)"]].filter(Boolean),r=process.env.LOCALAPPDATA;for(let n of t)e.push(O(n,"Tesseract-OCR"));if(r){e.push(O(r,"Programs","Tesseract-OCR"),O(r,"Microsoft","WinGet","Links"));let n=O(r,"Microsoft","WinGet","Packages");try{for(let s of ze(n))if(/^oschwartz10612\.Poppler/i.test(s))for(let i of ze(O(n,s)))e.push(O(n,s,i,"Library","bin"))}catch{}}for(let n of t)try{for(let s of ze(n))/^poppler/i.test(s)&&e.push(O(n,s,"Library","bin"),O(n,s,"bin"))}catch{}return e}function Be(e,t){let r=process.env[t];if(r)return zn(r)?r:void 0;let n=process.platform==="win32",s=n?[`${e}.exe`,e]:[e],i=(process.env.PATH??"").split(oi).filter(Boolean);n&&i.push(...ai());for(let o of i)for(let a of s)if(zn(O(o,a)))return O(o,a)}function te(e,t,r){try{return ei(e,t,{encoding:"utf8",timeout:r,maxBuffer:64*1024*1024,stdio:["ignore","pipe","ignore"],windowsHide:!0})}catch{return null}}function le(){if(Ue)return Ue;if(/^(0|off|false|no)$/i.test(process.env.NODATA_PDF_TOOLS??""))return Ue={ocrLangs:[],osd:!1};let e={pdftotext:Be("pdftotext","NODATA_PDFTOTEXT"),pdftoppm:Be("pdftoppm","NODATA_PDFTOPPM"),tesseract:Be("tesseract","NODATA_TESSERACT"),ocrmypdf:Be("ocrmypdf","NODATA_OCRMYPDF"),ocrLangs:[],osd:!1};if(e.tesseract){let t=new Set((te(e.tesseract,["--list-langs"],15e3)??"").split(/\r?\n/).map(r=>r.trim()));e.ocrLangs=["heb","eng"].filter(r=>t.has(r)),e.osd=t.has("osd")}return Ue=e}function Rt(e,t,r=".pdf"){let n=ni(O(ii(),"nd-read-"));try{let s=O(n,`in${r}`);return Gn(s,e,{mode:384}),t(n,s)}finally{ri(n,{recursive:!0,force:!0})}}function Tt(e){let t=e.replace(/[\u200E\u200F\u202A-\u202E\u2066-\u2069]/g,"").replace(/\f/g,`
9
+ `),truncated:a,streams:o})}var jl=64*1024*1024;function Vn(e){if(!e.subarray(0,8).toString("latin1").startsWith("%PDF-"))return"not a valid PDF";if(e.toString("latin1",0,Math.min(e.length,4096)).includes("/Encrypt"))return"encrypted (password or copy protection)";let r=zn(e),n=0,s=0,i=0;for(let o of r.values()){if(!o.stream)continue;if(/\/Subtype\s*\/Image\b/.test(o.dict)){s+=1;continue}let a=je(o);if(a===null){/\/Type\s*\/(Font|Metadata|XRef)|\/FontFile|\/Length1/.test(o.dict)||(i+=1);continue}/(TJ|Tj)\b/.test(a)&&(n+=1)}return n===0&&s>0?"no text layer \u2014 a scanned image (needs OCR, which NoData does not do)":n===0&&i>0?"its pages are compressed in a way NoData cannot open":n===0?"no text in it":"its fonts have no usable letter map \u2014 the text decodes to symbols"}import{execFileSync as si}from"node:child_process";import{existsSync as ii,mkdtempSync as oi,readFileSync as Kn,readdirSync as We,rmSync as ai,statSync as ci,writeFileSync as Zn}from"node:fs";import{tmpdir as li}from"node:os";import{delimiter as di,join as O}from"node:path";var ue="install the free tools once (they run only on this computer): winget install oschwartz10612.Poppler and winget install UB-Mannheim.TesseractOCR (tick Hebrew in its installer)",Be=null;function Xn(e){try{return ci(e).isFile()}catch{return!1}}function ui(){let e=[],t=[process.env.ProgramFiles,process.env["ProgramFiles(x86)"]].filter(Boolean),r=process.env.LOCALAPPDATA;for(let n of t)e.push(O(n,"Tesseract-OCR"));if(r){e.push(O(r,"Programs","Tesseract-OCR"),O(r,"Microsoft","WinGet","Links"));let n=O(r,"Microsoft","WinGet","Packages");try{for(let s of We(n))if(/^oschwartz10612\.Poppler/i.test(s))for(let i of We(O(n,s)))e.push(O(n,s,i,"Library","bin"))}catch{}}for(let n of t)try{for(let s of We(n))/^poppler/i.test(s)&&e.push(O(n,s,"Library","bin"),O(n,s,"bin"))}catch{}return e}function ze(e,t){let r=process.env[t];if(r)return Xn(r)?r:void 0;let n=process.platform==="win32",s=n?[`${e}.exe`,e]:[e],i=(process.env.PATH??"").split(di).filter(Boolean);n&&i.push(...ui());for(let o of i)for(let a of s)if(Xn(O(o,a)))return O(o,a)}function se(e,t,r){try{return si(e,t,{encoding:"utf8",timeout:r,maxBuffer:64*1024*1024,stdio:["ignore","pipe","ignore"],windowsHide:!0})}catch{return null}}function fe(){if(Be)return Be;if(/^(0|off|false|no)$/i.test(process.env.NODATA_PDF_TOOLS??""))return Be={ocrLangs:[],osd:!1};let e={pdftotext:ze("pdftotext","NODATA_PDFTOTEXT"),pdftoppm:ze("pdftoppm","NODATA_PDFTOPPM"),tesseract:ze("tesseract","NODATA_TESSERACT"),ocrmypdf:ze("ocrmypdf","NODATA_OCRMYPDF"),ocrLangs:[],osd:!1};if(e.tesseract){let t=new Set((se(e.tesseract,["--list-langs"],15e3)??"").split(/\r?\n/).map(r=>r.trim()));e.ocrLangs=["heb","eng"].filter(r=>t.has(r)),e.osd=t.has("osd")}return Be=e}function Pt(e,t,r=".pdf"){let n=oi(O(li(),"nd-read-"));try{let s=O(n,`in${r}`);return Zn(s,e,{mode:384}),t(n,s)}finally{ai(n,{recursive:!0,force:!0})}}function Lt(e){let t=e.replace(/[\u200E\u200F\u202A-\u202E\u2066-\u2069]/g,"").replace(/\f/g,`
10
10
  `).replace(/[ \t]+\n/g,`
11
- `).trim();return t.replace(/\s/g,"").length<2||At(t)?null:Me(t)?t.split(`
12
- `).map(He).join(`
13
- `):t}function Vn(e){let t=le().pdftotext;if(!t)return null;let r=Rt(e,(n,s)=>te(t,["-enc","UTF-8","-q",s,"-"],6e4));return r===null?null:Tt(r)}var ci=()=>Math.max(1,Number(process.env.NODATA_OCR_MAX_PAGES)||10);function Xn(e){let t=e.toString("latin1",0,64).match(/^P5\s+(\d+)\s+(\d+)\s+255\s/);return t?{w:Number(t[1]),h:Number(t[2]),at:t[0].length}:null}function li(e,t){let r=Xn(e);if(!r)return null;let{w:n,h:s,at:i}=r,o=e.subarray(i),[a,c]=t===180?[n,s]:[s,n],l=Buffer.alloc(a*c);for(let p=0;p<s;p++)for(let d=0;d<n;d++){let m=o[p*n+d];t===180?l[(s-1-p)*n+(n-1-d)]=m:t===90?l[d*a+(s-1-p)]=m:l[(n-1-d)*a+p]=m}return Buffer.concat([Buffer.from(`P5
11
+ `).trim();return t.replace(/\s/g,"").length<2||Tt(t)?null:He(t)?t.split(`
12
+ `).map(Ue).join(`
13
+ `):t}function Yn(e){let t=fe().pdftotext;if(!t)return null;let r=Pt(e,(n,s)=>se(t,["-enc","UTF-8","-q",s,"-"],6e4));return r===null?null:Lt(r)}var fi=()=>Math.max(1,Number(process.env.NODATA_OCR_MAX_PAGES)||10);function Jn(e){let t=e.toString("latin1",0,64).match(/^P5\s+(\d+)\s+(\d+)\s+255\s/);return t?{w:Number(t[1]),h:Number(t[2]),at:t[0].length}:null}function pi(e,t){let r=Jn(e);if(!r)return null;let{w:n,h:s,at:i}=r,o=e.subarray(i),[a,c]=t===180?[n,s]:[s,n],l=Buffer.alloc(a*c);for(let f=0;f<s;f++)for(let d=0;d<n;d++){let h=o[f*n+d];t===180?l[(s-1-f)*n+(n-1-d)]=h:t===90?l[d*a+(s-1-f)]=h:l[(n-1-d)*a+f]=h}return Buffer.concat([Buffer.from(`P5
14
14
  ${a} ${c}
15
15
  255
16
- `,"latin1"),l])}function Kn(e,t){if(!e.osd)return;let r=te(e.tesseract,[t,"-","--psm","0"],6e4)??"",n=Number(r.match(/Rotate:\s*(\d+)/)?.[1]??0),s=Number(r.match(/Orientation confidence:\s*([\d.]+)/)?.[1]??0);if(!(n===90||n===180||n===270)||s<2)return;let i=li(Wn(t),n);i&&Gn(t,i,{mode:384})}function di(e,t,r){if(!e.ocrmypdf||e.ocrLangs.length===0)return null;let n=O(t,"side.txt");return te(e.ocrmypdf,["-q","-l",e.ocrLangs.join("+"),"--rotate-pages","--deskew","--force-ocr","--sidecar",n,r,O(t,"out.pdf")],3e5),ti(n)?Tt(Wn(n,"utf8")):null}function Zn(e){let t=le();if(!t.pdftoppm||!t.tesseract||t.ocrLangs.length===0)return null;let r=ci();return Rt(e,(n,s)=>{if(te(t.pdftoppm,["-r","300","-gray","-f","1","-l",String(r+1),s,O(n,"p")],12e4)===null)return null;let i=ze(n).filter(l=>/^p-\d+\.pgm$/.test(l)).sort((l,p)=>Number(l.match(/\d+/)[0])-Number(p.match(/\d+/)[0])),o=i.length>r,a=[];for(let l of i.slice(0,r)){Kn(t,O(n,l));let p=te(t.tesseract,[O(n,l),"stdout","-l",t.ocrLangs.join("+"),"--psm","3"],12e4);p&&a.push(p)}let c=Tt(a.join(`
17
- `))??di(t,n,s);return c===null?null:{text:c,truncated:o,pages:Math.min(i.length,r)}})}function It(e){return new Set(e.match(/[\p{L}\p{N}]{2,}/gu)??[])}function We(e,t={}){let r=$t(e),n=Vn(e);if(r){if(n===null)return{...r,engine:"builtin",uncertain:!1};let i=It(r.text),o=n.split(`
18
- `).filter(p=>[...It(p)].some(d=>!i.has(d))),a=It(n),c=[...a].filter(p=>!i.has(p)),l=c.length>Math.max(3,a.size*.1)||c.some(p=>/^\d{5,}$/.test(p));return o.length===0?{...r,engine:"builtin",uncertain:!1}:{...r,text:r.text+`
16
+ `,"latin1"),l])}function qn(e,t){if(!e.osd)return;let r=se(e.tesseract,[t,"-","--psm","0"],6e4)??"",n=Number(r.match(/Rotate:\s*(\d+)/)?.[1]??0),s=Number(r.match(/Orientation confidence:\s*([\d.]+)/)?.[1]??0);if(!(n===90||n===180||n===270)||s<2)return;let i=pi(Kn(t),n);i&&Zn(t,i,{mode:384})}function hi(e,t,r){if(!e.ocrmypdf||e.ocrLangs.length===0)return null;let n=O(t,"side.txt");return se(e.ocrmypdf,["-q","-l",e.ocrLangs.join("+"),"--rotate-pages","--deskew","--force-ocr","--sidecar",n,r,O(t,"out.pdf")],3e5),ii(n)?Lt(Kn(n,"utf8")):null}function Qn(e){let t=fe();if(!t.pdftoppm||!t.tesseract||t.ocrLangs.length===0)return null;let r=fi();return Pt(e,(n,s)=>{if(se(t.pdftoppm,["-r","300","-gray","-f","1","-l",String(r+1),s,O(n,"p")],12e4)===null)return null;let i=We(n).filter(l=>/^p-\d+\.pgm$/.test(l)).sort((l,f)=>Number(l.match(/\d+/)[0])-Number(f.match(/\d+/)[0])),o=i.length>r,a=[];for(let l of i.slice(0,r)){qn(t,O(n,l));let f=se(t.tesseract,[O(n,l),"stdout","-l",t.ocrLangs.join("+"),"--psm","3"],12e4);f&&a.push(f)}let c=Lt(a.join(`
17
+ `))??hi(t,n,s);return c===null?null:{text:c,truncated:o,pages:Math.min(i.length,r)}})}function Ct(e){return new Set(e.match(/[\p{L}\p{N}]{2,}/gu)??[])}function Ge(e,t={}){let r=It(e),n=Yn(e);if(r){if(n===null)return{...r,engine:"builtin",uncertain:!1};let i=Ct(r.text),o=n.split(`
18
+ `).filter(f=>[...Ct(f)].some(d=>!i.has(d))),a=Ct(n),c=[...a].filter(f=>!i.has(f)),l=c.length>Math.max(3,a.size*.1)||c.some(f=>/^\d{5,}$/.test(f));return o.length===0?{...r,engine:"builtin",uncertain:!1}:{...r,text:r.text+`
19
19
  `+o.join(`
20
- `),engine:"builtin",uncertain:l}}if(!e.subarray(0,8).toString("latin1").startsWith("%PDF-"))return null;if(n!==null)return{text:n,truncated:!1,streams:0,engine:"pdftotext",uncertain:!1};if(!t.ocr)return null;let s=Zn(e);return s?{text:s.text,truncated:s.truncated,streams:0,engine:"ocr",uncertain:!1}:null}function Yn(e){let t=Bn(e),r=le();return/scanned image/.test(t)?r.tesseract&&r.pdftoppm&&r.ocrLangs.length?"no text layer \u2014 a scanned image; the folder scan reads it with OCR on this computer, the read gate does not wait for OCR":`no text layer \u2014 a scanned image. To read it: ${ce}`:/encrypted/.test(t)?t+(r.pdftotext?"":` \u2014 if it opens without a password, the second reader can read it: ${ce}`):/letter map|compressed/.test(t)&&!r.pdftotext?`${t}. A second reader may read it: ${ce}`:/letter map|compressed/.test(t)?`${t} (the second reader, pdftotext, could not read it either)`:t}var Jn=[208,207,17,224,161,177,26,225],Ct=4294967294,Ge=4294967295,ui=64*1024*1024;function Ae(e){if(e.length<512)return!1;for(let t=0;t<Jn.length;t+=1)if(e[t]!==Jn[t])return!1;return!0}function Pt(e){if(!Ae(e))return null;try{let t=e.readUInt16LE(30),r=e.readUInt16LE(32);if(t!==9&&t!==12)return null;let n=1<<t,s=1<<r,i=e.readUInt32LE(44),o=e.readUInt32LE(48),a=e.readUInt32LE(56),c=e.readUInt32LE(60),l=e.readUInt32LE(68),p=e.readUInt32LE(72),d=Math.floor((e.length-n)/n)+1,m=_=>{let w=(_+1)*n;return _>=d||w>=e.length?null:e.subarray(w,Math.min(w+n,e.length))},f=[];for(let _=0;_<109&&f.length<i;_+=1){let w=e.readUInt32LE(76+_*4);w!==Ge&&f.push(w)}let g=l;for(let _=0;_<p&&g!==Ct&&g!==Ge;_+=1){let w=m(g);if(!w)return null;let A=n/4-1;for(let T=0;T<A&&f.length<i;T+=1){let E=w.readUInt32LE(T*4);E!==Ge&&f.push(E)}g=w.readUInt32LE(A*4)}let u=[];for(let _ of f){let w=m(_);if(!w)return null;for(let A=0;A+4<=w.length;A+=4)u.push(w.readUInt32LE(A))}let y=(_,w,A)=>{let T=[],E=_;for(;E!==Ct&&E!==Ge;){if(E>=w.length||T.length>A)return null;T.push(E),E=w[E]}return T},h=(_,w)=>{let A=y(_,u,d);if(!A)return null;let T=[];for(let ee of A){let ke=m(ee);if(!ke)return null;T.push(ke)}let E=Buffer.concat(T);return w>=0?E.subarray(0,Math.min(w,E.length)):E},x=h(o,-1);if(!x)return null;let b=[],R=new Map;for(let _=0,w=0;_+128<=x.length;_+=128,w+=1){let A=x.readUInt16LE(_+64),T=x[_+66];if(T===0||A<2||A>64)continue;let E=x.subarray(_,_+A-2).toString("utf16le"),ee={id:w,name:E,type:T,left:x.readUInt32LE(_+68),right:x.readUInt32LE(_+72),child:x.readUInt32LE(_+76),start:x.readUInt32LE(_+116),size:x.readUInt32LE(_+120),path:E};b.push(ee),R.set(w,ee)}let S=new Set,j=(_,w)=>{let A=[_];for(;A.length;){let T=A.pop(),E=R.get(T);!E||S.has(T)||(S.add(T),E.path=w?`${w}/${E.name}`:E.name,A.push(E.left,E.right),E.type===1&&j(E.child,E.path))}},W=b.find(_=>_.type===5);W&&j(W.child,"");let P=b.find(_=>_.type===5);if(!P)return null;let V=null,N=[];if(b.some(_=>_.type===2&&_.size<a&&_.size>0)){V=h(P.start,P.size);let _=c!==Ct?h(c,-1):null;if(_)for(let w=0;w+4<=_.length;w+=4)N.push(_.readUInt32LE(w));else N=[]}let M=new Map,H=new Map,K=(_,w)=>{M.has(_.name)||M.set(_.name,w),H.set(_.path,w)};for(let _ of b)if(_.type===2&&!(_.size>ui)){if(_.size===0){K(_,Buffer.alloc(0));continue}if(_.size<a){if(!V)continue;let w=y(_.start,N,Math.ceil(V.length/s)+1);if(!w)continue;let A=w.map(T=>V.subarray(T*s,T*s+s));K(_,Buffer.concat(A).subarray(0,_.size))}else{let w=h(_.start,_.size);w&&K(_,w)}}return{streams:M,paths:H}}catch{return null}}import{TextDecoder as qn}from"node:util";var $e="password-protected: open it with its password, or check it by hand";function fi(e){let t=e.streams;return t.has("EncryptionInfo")&&t.has("EncryptedPackage")?"encrypted-ooxml":t.has("WordDocument")?"doc":t.has("Workbook")||t.has("Book")?"xls":t.has("PowerPoint Document")?"ppt":[...t.keys()].some(r=>r.startsWith("__substg1.0_"))?"msg":null}var nr=e=>{try{return new qn(e)}catch{return new qn("latin1")}},de=nr("windows-1252");function Ie(e){return e.replace(/[\r\x07\x0b\x0c]/g,`
20
+ `),engine:"builtin",uncertain:l}}if(!e.subarray(0,8).toString("latin1").startsWith("%PDF-"))return null;if(n!==null)return{text:n,truncated:!1,streams:0,engine:"pdftotext",uncertain:!1};if(!t.ocr)return null;let s=Qn(e);return s?{text:s.text,truncated:s.truncated,streams:0,engine:"ocr",uncertain:!1}:null}function er(e){let t=Vn(e),r=fe();return/scanned image/.test(t)?r.tesseract&&r.pdftoppm&&r.ocrLangs.length?"no text layer \u2014 a scanned image; the folder scan reads it with OCR on this computer, the read gate does not wait for OCR":`no text layer \u2014 a scanned image. To read it: ${ue}`:/encrypted/.test(t)?t+(r.pdftotext?"":` \u2014 if it opens without a password, the second reader can read it: ${ue}`):/letter map|compressed/.test(t)&&!r.pdftotext?`${t}. A second reader may read it: ${ue}`:/letter map|compressed/.test(t)?`${t} (the second reader, pdftotext, could not read it either)`:t}var tr=[208,207,17,224,161,177,26,225],Nt=4294967294,Ve=4294967295,mi=64*1024*1024;function Ae(e){if(e.length<512)return!1;for(let t=0;t<tr.length;t+=1)if(e[t]!==tr[t])return!1;return!0}function Ot(e){if(!Ae(e))return null;try{let t=e.readUInt16LE(30),r=e.readUInt16LE(32);if(t!==9&&t!==12)return null;let n=1<<t,s=1<<r,i=e.readUInt32LE(44),o=e.readUInt32LE(48),a=e.readUInt32LE(56),c=e.readUInt32LE(60),l=e.readUInt32LE(68),f=e.readUInt32LE(72),d=Math.floor((e.length-n)/n)+1,h=w=>{let k=(w+1)*n;return w>=d||k>=e.length?null:e.subarray(k,Math.min(k+n,e.length))},p=[];for(let w=0;w<109&&p.length<i;w+=1){let k=e.readUInt32LE(76+w*4);k!==Ve&&p.push(k)}let g=l;for(let w=0;w<f&&g!==Nt&&g!==Ve;w+=1){let k=h(g);if(!k)return null;let $=n/4-1;for(let I=0;I<$&&p.length<i;I+=1){let A=k.readUInt32LE(I*4);A!==Ve&&p.push(A)}g=k.readUInt32LE($*4)}let u=[];for(let w of p){let k=h(w);if(!k)return null;for(let $=0;$+4<=k.length;$+=4)u.push(k.readUInt32LE($))}let y=(w,k,$)=>{let I=[],A=w;for(;A!==Nt&&A!==Ve;){if(A>=k.length||I.length>$)return null;I.push(A),A=k[A]}return I},m=(w,k)=>{let $=y(w,u,d);if(!$)return null;let I=[];for(let re of $){let ke=h(re);if(!ke)return null;I.push(ke)}let A=Buffer.concat(I);return k>=0?A.subarray(0,Math.min(k,A.length)):A},x=m(o,-1);if(!x)return null;let _=[],E=new Map;for(let w=0,k=0;w+128<=x.length;w+=128,k+=1){let $=x.readUInt16LE(w+64),I=x[w+66];if(I===0||$<2||$>64)continue;let A=x.subarray(w,w+$-2).toString("utf16le"),re={id:k,name:A,type:I,left:x.readUInt32LE(w+68),right:x.readUInt32LE(w+72),child:x.readUInt32LE(w+76),start:x.readUInt32LE(w+116),size:x.readUInt32LE(w+120),path:A};_.push(re),E.set(k,re)}let b=new Set,F=(w,k)=>{let $=[w];for(;$.length;){let I=$.pop(),A=E.get(I);!A||b.has(I)||(b.add(I),A.path=k?`${k}/${A.name}`:A.name,$.push(A.left,A.right),A.type===1&&F(A.child,A.path))}},H=_.find(w=>w.type===5);H&&F(H.child,"");let P=_.find(w=>w.type===5);if(!P)return null;let X=null,N=[];if(_.some(w=>w.type===2&&w.size<a&&w.size>0)){X=m(P.start,P.size);let w=c!==Nt?m(c,-1):null;if(w)for(let k=0;k+4<=w.length;k+=4)N.push(w.readUInt32LE(k));else N=[]}let j=new Map,U=new Map,Z=(w,k)=>{j.has(w.name)||j.set(w.name,k),U.set(w.path,k)};for(let w of _)if(w.type===2&&!(w.size>mi)){if(w.size===0){Z(w,Buffer.alloc(0));continue}if(w.size<a){if(!X)continue;let k=y(w.start,N,Math.ceil(X.length/s)+1);if(!k)continue;let $=k.map(I=>X.subarray(I*s,I*s+s));Z(w,Buffer.concat($).subarray(0,w.size))}else{let k=m(w.start,w.size);k&&Z(w,k)}}return{streams:j,paths:U}}catch{return null}}import{TextDecoder as nr}from"node:util";var $e="password-protected: open it with its password, or check it by hand";function gi(e){let t=e.streams;return t.has("EncryptionInfo")&&t.has("EncryptedPackage")?"encrypted-ooxml":t.has("WordDocument")?"doc":t.has("Workbook")||t.has("Book")?"xls":t.has("PowerPoint Document")?"ppt":[...t.keys()].some(r=>r.startsWith("__substg1.0_"))?"msg":null}var ir=e=>{try{return new nr(e)}catch{return new nr("latin1")}},pe=ir("windows-1252");function Re(e){return e.replace(/[\r\x07\x0b\x0c]/g,`
21
21
  `).replace(/[\x13\x14\x15]/g," ").replace(/[\x00-\x08\x0e-\x1f]/g,"").replace(/\n{3,}/g,`
22
22
 
23
- `)}function pi(e,t){return e.length>t?{text:e.slice(0,t),truncated:!0}:{text:e,truncated:!1}}function hi(e){let t=e.streams.get("WordDocument");if(t.length<512)return{kind:"doc",reason:"damaged Word file"};let r=t.readUInt16LE(10);if(r&256||r&32768)return{kind:"doc",reason:$e};if(t.readUInt16LE(2)<101){let g=t.readUInt32LE(24),u=t.readUInt32LE(28);return u<=g||u>t.length?{kind:"doc",reason:"damaged Word file"}:Ie(de.decode(t.subarray(g,u)))}let s=e.streams.get(r&512?"1Table":"0Table");if(!s)return{kind:"doc",reason:"damaged Word file (no table stream)"};let i=32;i+=2+t.readUInt16LE(i)*2,i+=2+t.readUInt16LE(i)*4;let o=i+2,a=t.readUInt32LE(o+264),c=t.readUInt32LE(o+264+4);if(!c||a+c>s.length)return{kind:"doc",reason:"damaged Word file (no piece table)"};let l=a,p=a+c,d=null;for(;l<p;){let g=s[l];if(g===1)l+=3+s.readInt16LE(l+1);else if(g===2){let u=s.readUInt32LE(l+1);d=s.subarray(l+5,Math.min(l+5+u,s.length));break}else break}if(!d||d.length<16)return{kind:"doc",reason:"damaged Word file (no piece table)"};let m=Math.floor((d.length-4)/12),f=[];for(let g=0;g<m;g+=1){let u=d.readUInt32LE(g*4),h=d.readUInt32LE((g+1)*4)-u;if(h<=0||h>t.length)continue;let x=d.readUInt32LE(4*(m+1)+g*8+2);if(x&1073741824){let b=(x&1073741823)/2;f.push(de.decode(t.subarray(b,Math.min(b+h,t.length))))}else f.push(t.subarray(x,Math.min(x+h*2,t.length)).toString("utf16le"))}return Ie(f.join(""))}var Lt=class{segs;i=0;p=0;constructor(t){this.segs=t}here(){for(;this.i<this.segs.length&&this.p>=this.segs[this.i].length;)this.i+=1,this.p=0;return this.i<this.segs.length?this.segs[this.i]:null}get done(){return this.here()===null}atSeam(){return this.p===0&&this.i>0}u8(){let t=this.here();if(!t)throw new Error("eof");return t[this.p++]}u16(){return this.u8()|this.u8()<<8}u32(){return(this.u16()|this.u16()<<16)>>>0}skip(t){for(let r=0;r<t;r+=1)this.u8()}chars(t,r){let n="",s=t,i=r;for(;s>0&&this.here();){this.p===0&&n.length>0&&(i=(this.u8()&1)===1);let a=this.here();if(!a)break;let c=Math.floor((a.length-this.p)/(i?2:1)),l=Math.min(s,c);if(l<=0){this.p=a.length;continue}let p=a.subarray(this.p,this.p+l*(i?2:1));n+=i?p.toString("utf16le"):p.toString("latin1"),this.p+=p.length,s-=l}return n}};function mi(e){let t=new Lt(e),r=[];try{t.u32();let n=t.u32();for(let s=0;s<n&&!t.done;s+=1){let i=t.u16(),o=t.u8(),a=o&8?t.u16():0,c=o&4?t.u32():0;r.push(t.chars(i,(o&1)===1)),t.skip(a*4+c)}}catch{}return r}function Qn(e,t,r,n){if(t+2>e.length)return"";let s=e.readUInt16LE(t);if(!r)return n.decode(e.subarray(t+2,t+2+s));let i=e[t+2],o=t+3;return i&8&&(o+=2),i&4&&(o+=4),i&1?e.subarray(o,o+s*2).toString("utf16le"):e.subarray(o,o+s).toString("latin1")}function er(e){let t;if(e&2)t=e>>2;else{let r=Buffer.alloc(8);r.writeUInt32LE(0,0),r.writeUInt32LE((e&4294967292)>>>0,4),t=r.readDoubleLE(0)}return e&1?t/100:t}var Ve=e=>Number.isFinite(e)?String(e):"";function gi(e){let t=e.streams.get("Workbook")??e.streams.get("Book"),r=!0,n=de,s=[],i=new Set,o=[],a=[],c=-1,l=null,p=0,d=(u,y,h)=>{if(c<0||!h)return;let x=a[c],b=x.get(u)??new Map;b.set(y,h),x.set(u,b)},m=0;for(;m+4<=t.length;){let u=t.readUInt16LE(m),y=t.readUInt16LE(m+2),h=t.subarray(m+4,Math.min(m+4+y,t.length)),x=m+4+y;switch(u){case 2057:p+=1,h.length>=4&&(r=h.readUInt16LE(0)===1536),p===1&&h.length>=4&&h.readUInt16LE(2)!==5&&(c=a.length,a.push(new Map));break;case 10:p=Math.max(0,p-1);break;case 47:return{kind:"xls",reason:$e};case 66:if(h.length>=2&&!r){let b=h.readUInt16LE(0);n=b===1200?de:nr(`windows-${b}`)}break;case 133:if(h.length>6){let b=h[6];if(r){let R=h[7]&1;o.push(R?h.subarray(8,8+b*2).toString("utf16le"):h.subarray(8,8+b).toString("latin1"))}else o.push(n.decode(h.subarray(7,7+b)))}break;case 252:{let b=[h];for(;x+4<=t.length&&t.readUInt16LE(x)===60;){let R=t.readUInt16LE(x+2);b.push(t.subarray(x+4,Math.min(x+4+R,t.length))),x+=4+R}s=mi(b);break}case 253:if(h.length>=10){let b=h.readUInt32LE(6);i.add(b),d(h.readUInt16LE(0),h.readUInt16LE(2),s[b]??"")}break;case 516:case 214:h.length>=8&&d(h.readUInt16LE(0),h.readUInt16LE(2),Qn(h,6,r,n));break;case 515:h.length>=14&&d(h.readUInt16LE(0),h.readUInt16LE(2),Ve(h.readDoubleLE(6)));break;case 638:h.length>=10&&d(h.readUInt16LE(0),h.readUInt16LE(2),Ve(er(h.readUInt32LE(6))));break;case 189:{if(h.length>=6){let b=h.readUInt16LE(0),R=h.readUInt16LE(2);for(let S=4;S+6<=h.length-2;S+=6)d(b,R++,Ve(er(h.readUInt32LE(S+2))))}break}case 6:if(h.length>=14){let b=h.readUInt16LE(0),R=h.readUInt16LE(2);h.readUInt16LE(12)===65535?l=h[6]===0?[b,R]:null:d(b,R,Ve(h.readDoubleLE(6)))}break;case 519:l&&d(l[0],l[1],Qn(h,0,r,n)),l=null;break}m=x}let f=[];a.forEach((u,y)=>{f.push(o[y]??"");for(let h of[...u.keys()].sort((x,b)=>x-b)){let x=u.get(h);f.push([...x.keys()].sort((b,R)=>b-R).map(b=>x.get(b)).join(" "))}f.push("")});let g=s.filter((u,y)=>!i.has(y));return g.length&&f.push(...g),Ie(f.join(`
24
- `))}function yi(e){if(e.streams.has("EncryptedSummary"))return{kind:"ppt",reason:$e};let t=e.streams.get("PowerPoint Document"),r=[],n=0;for(;n+8<=t.length;){let s=t.readUInt16LE(n)&15,i=t.readUInt16LE(n+2),o=t.readUInt32LE(n+4);if(i===12052)return{kind:"ppt",reason:$e};if(s===15){n+=8;continue}let a=t.subarray(n+8,Math.min(n+8+o,t.length));i===4e3||i===4026?r.push(a.toString("utf16le")):i===4008&&r.push(de.decode(a)),n+=8+o}return Ie(r.join(`
25
- `))}function bi(e){let t=[];for(let[r,n]of e.paths){if(r.startsWith("__attach_"))continue;let s=/(?:^|\/)__substg1\.0_([0-9A-F]{4})(001F|001E)$/i.exec(r);s&&t.push(s[2].toUpperCase()==="001F"?n.toString("utf16le"):de.decode(n))}return Ie(t.join(`
26
- `))}function tr(e){let t=new Map;for(let[r,n]of e.paths){let s=/^(__attach_version1\.0_#[0-9A-F]{8})\/__substg1\.0_(3707|3704|3701)(001F|0102)$/i.exec(r);if(!s)continue;let i=t.get(s[1])??{};s[2]==="3701"&&s[3]==="0102"?i.data=n:s[2]==="3707"?i.name=n.toString("utf16le").replace(/\0+$/,""):s[2]==="3704"&&(i.short=n.toString("utf16le").replace(/\0+$/,"")),t.set(s[1],i)}return[...t.values()].filter(r=>r.data).map((r,n)=>({name:r.name||r.short||`attachment-${n+1}`,data:r.data}))}function Nt(e,t){let r=Pt(e);if(!r)return{kind:null,reason:"damaged Office 97-2003 file"};let n=fi(r);if(!n)return{kind:null,reason:"a compound file that is not a Word, Excel, PowerPoint or Outlook file"};if(n==="encrypted-ooxml")return{kind:n,reason:$e};let s;try{s=n==="doc"?hi(r):n==="xls"?gi(r):n==="ppt"?yi(r):bi(r)}catch{s={kind:n,reason:"damaged Office 97-2003 file"}}if(typeof s!="string")return s;if(!s.trim()&&!(n==="msg"&&tr(r).length))return{kind:n,reason:"no text inside (an empty file, or only pictures)"};let i=pi(s,t),o=n==="msg"?tr(r):[];return{kind:n,text:i.text,truncated:i.truncated,parts:[`cfb:${n}`],...o.length?{attachments:o}:{}}}import{TextDecoder as rr}from"node:util";var _i=new Set(["fonttbl","colortbl","stylesheet","listtable","listoverridetable","rsidtbl","generator","pict","object","objdata","themedata","colorschememapping","datastore","latentstyles","xmlnstbl","mmathpr","filetbl","revtbl","pgdsctbl","bkmkstart","bkmkend","fldinst","shppict","nonshppict","blipuid","panose","falt","wgrffmtfilter","defchp","defpap"]),sr=e=>{try{return new rr(e===65001?"utf-8":`windows-${e}`)}catch{return new rr("windows-1252")}};function Xe(e){return e.length>=5&&e.subarray(0,5).toString("latin1")==="{\\rtf"}function Ot(e){let t=sr(1252),r=[],n=[],s=()=>{n.length&&(r.push(t.decode(Uint8Array.from(n))),n=[])},i=[],o=!1,a=1,c=0,l=0,p=e.length;for(;l<p;){let d=e[l];if(d==="{"){s(),i.push({skip:o,uc:a}),l+=1,e.startsWith("\\*",l)&&(o=!0);continue}if(d==="}"){s();let m=i.pop();m&&(o=m.skip,a=m.uc),l+=1;continue}if(d==="\\"){let m=e[l+1];if(m==="'"){let y=parseInt(e.substr(l+2,2),16);if(l+=4,c>0){c-=1;continue}!o&&Number.isFinite(y)&&n.push(y);continue}if(m==="\\"||m==="{"||m==="}"){o||(s(),r.push(m)),l+=2;continue}if(m==="~"){o||r.push(" "),l+=2;continue}let f=/^([a-zA-Z]+)(-?\d+)? ?/.exec(e.slice(l+1,l+40));if(!f){l+=2;continue}l+=1+f[0].length;let g=f[1].toLowerCase(),u=f[2]!==void 0?Number(f[2]):null;if(_i.has(g)){o=!0;continue}g==="ansicpg"&&u?t=sr(u):g==="uc"&&u!==null?a=u:g==="u"&&u!==null?(s(),o||r.push(String.fromCharCode(u<0?u+65536:u)),c=a):!o&&(g==="par"||g==="line"||g==="row"||g==="sect"||g==="page")?(s(),r.push(`
23
+ `)}function yi(e,t){return e.length>t?{text:e.slice(0,t),truncated:!0}:{text:e,truncated:!1}}function bi(e){let t=e.streams.get("WordDocument");if(t.length<512)return{kind:"doc",reason:"damaged Word file"};let r=t.readUInt16LE(10);if(r&256||r&32768)return{kind:"doc",reason:$e};if(t.readUInt16LE(2)<101){let g=t.readUInt32LE(24),u=t.readUInt32LE(28);return u<=g||u>t.length?{kind:"doc",reason:"damaged Word file"}:Re(pe.decode(t.subarray(g,u)))}let s=e.streams.get(r&512?"1Table":"0Table");if(!s)return{kind:"doc",reason:"damaged Word file (no table stream)"};let i=32;i+=2+t.readUInt16LE(i)*2,i+=2+t.readUInt16LE(i)*4;let o=i+2,a=t.readUInt32LE(o+264),c=t.readUInt32LE(o+264+4);if(!c||a+c>s.length)return{kind:"doc",reason:"damaged Word file (no piece table)"};let l=a,f=a+c,d=null;for(;l<f;){let g=s[l];if(g===1)l+=3+s.readInt16LE(l+1);else if(g===2){let u=s.readUInt32LE(l+1);d=s.subarray(l+5,Math.min(l+5+u,s.length));break}else break}if(!d||d.length<16)return{kind:"doc",reason:"damaged Word file (no piece table)"};let h=Math.floor((d.length-4)/12),p=[];for(let g=0;g<h;g+=1){let u=d.readUInt32LE(g*4),m=d.readUInt32LE((g+1)*4)-u;if(m<=0||m>t.length)continue;let x=d.readUInt32LE(4*(h+1)+g*8+2);if(x&1073741824){let _=(x&1073741823)/2;p.push(pe.decode(t.subarray(_,Math.min(_+m,t.length))))}else p.push(t.subarray(x,Math.min(x+m*2,t.length)).toString("utf16le"))}return Re(p.join(""))}var Dt=class{segs;i=0;p=0;constructor(t){this.segs=t}here(){for(;this.i<this.segs.length&&this.p>=this.segs[this.i].length;)this.i+=1,this.p=0;return this.i<this.segs.length?this.segs[this.i]:null}get done(){return this.here()===null}atSeam(){return this.p===0&&this.i>0}u8(){let t=this.here();if(!t)throw new Error("eof");return t[this.p++]}u16(){return this.u8()|this.u8()<<8}u32(){return(this.u16()|this.u16()<<16)>>>0}skip(t){for(let r=0;r<t;r+=1)this.u8()}chars(t,r){let n="",s=t,i=r;for(;s>0&&this.here();){this.p===0&&n.length>0&&(i=(this.u8()&1)===1);let a=this.here();if(!a)break;let c=Math.floor((a.length-this.p)/(i?2:1)),l=Math.min(s,c);if(l<=0){this.p=a.length;continue}let f=a.subarray(this.p,this.p+l*(i?2:1));n+=i?f.toString("utf16le"):f.toString("latin1"),this.p+=f.length,s-=l}return n}};function _i(e){let t=new Dt(e),r=[];try{t.u32();let n=t.u32();for(let s=0;s<n&&!t.done;s+=1){let i=t.u16(),o=t.u8(),a=o&8?t.u16():0,c=o&4?t.u32():0;r.push(t.chars(i,(o&1)===1)),t.skip(a*4+c)}}catch{}return r}function rr(e,t,r,n){if(t+2>e.length)return"";let s=e.readUInt16LE(t);if(!r)return n.decode(e.subarray(t+2,t+2+s));let i=e[t+2],o=t+3;return i&8&&(o+=2),i&4&&(o+=4),i&1?e.subarray(o,o+s*2).toString("utf16le"):e.subarray(o,o+s).toString("latin1")}function Te(e){let t;if(e&2)t=e>>2;else{let r=Buffer.alloc(8);r.writeUInt32LE(0,0),r.writeUInt32LE((e&4294967292)>>>0,4),t=r.readDoubleLE(0)}return e&1?t/100:t}var Xe=e=>Number.isFinite(e)?String(e):"";function xi(e){let t=e.streams.get("Workbook")??e.streams.get("Book"),r=!0,n=pe,s=[],i=new Set,o=[],a=[],c=-1,l=null,f=0,d=(u,y,m)=>{if(c<0||!m)return;let x=a[c],_=x.get(u)??new Map;_.set(y,m),x.set(u,_)},h=0;for(;h+4<=t.length;){let u=t.readUInt16LE(h),y=t.readUInt16LE(h+2),m=t.subarray(h+4,Math.min(h+4+y,t.length)),x=h+4+y;switch(u){case 2057:f+=1,m.length>=4&&(r=m.readUInt16LE(0)===1536),f===1&&m.length>=4&&m.readUInt16LE(2)!==5&&(c=a.length,a.push(new Map));break;case 10:f=Math.max(0,f-1);break;case 47:return{kind:"xls",reason:$e};case 66:if(m.length>=2&&!r){let _=m.readUInt16LE(0);n=_===1200?pe:ir(`windows-${_}`)}break;case 133:if(m.length>6){let _=m[6];if(r){let E=m[7]&1;o.push(E?m.subarray(8,8+_*2).toString("utf16le"):m.subarray(8,8+_).toString("latin1"))}else o.push(n.decode(m.subarray(7,7+_)))}break;case 252:{let _=[m];for(;x+4<=t.length&&t.readUInt16LE(x)===60;){let E=t.readUInt16LE(x+2);_.push(t.subarray(x+4,Math.min(x+4+E,t.length))),x+=4+E}s=_i(_);break}case 253:if(m.length>=10){let _=m.readUInt32LE(6);i.add(_),d(m.readUInt16LE(0),m.readUInt16LE(2),s[_]??"")}break;case 516:case 214:m.length>=8&&d(m.readUInt16LE(0),m.readUInt16LE(2),rr(m,6,r,n));break;case 515:m.length>=14&&d(m.readUInt16LE(0),m.readUInt16LE(2),Xe(m.readDoubleLE(6)));break;case 638:m.length>=10&&d(m.readUInt16LE(0),m.readUInt16LE(2),Xe(Te(m.readUInt32LE(6))));break;case 189:{if(m.length>=6){let _=m.readUInt16LE(0),E=m.readUInt16LE(2);for(let b=4;b+6<=m.length-2;b+=6)d(_,E++,Xe(Te(m.readUInt32LE(b+2))))}break}case 6:if(m.length>=14){let _=m.readUInt16LE(0),E=m.readUInt16LE(2);m.readUInt16LE(12)===65535?l=m[6]===0?[_,E]:null:d(_,E,Xe(m.readDoubleLE(6)))}break;case 519:l&&d(l[0],l[1],rr(m,0,r,n)),l=null;break}h=x}let p=[];a.forEach((u,y)=>{p.push(o[y]??"");for(let m of[...u.keys()].sort((x,_)=>x-_)){let x=u.get(m);p.push([...x.keys()].sort((_,E)=>_-E).map(_=>x.get(_)).join(" "))}p.push("")});let g=s.filter((u,y)=>!i.has(y));return g.length&&p.push(...g),Re(p.join(`
24
+ `))}function wi(e){if(e.streams.has("EncryptedSummary"))return{kind:"ppt",reason:$e};let t=e.streams.get("PowerPoint Document"),r=[],n=0;for(;n+8<=t.length;){let s=t.readUInt16LE(n)&15,i=t.readUInt16LE(n+2),o=t.readUInt32LE(n+4);if(i===12052)return{kind:"ppt",reason:$e};if(s===15){n+=8;continue}let a=t.subarray(n+8,Math.min(n+8+o,t.length));i===4e3||i===4026?r.push(a.toString("utf16le")):i===4008&&r.push(pe.decode(a)),n+=8+o}return Re(r.join(`
25
+ `))}function ki(e){let t=[];for(let[r,n]of e.paths){if(r.startsWith("__attach_"))continue;let s=/(?:^|\/)__substg1\.0_([0-9A-F]{4})(001F|001E)$/i.exec(r);s&&t.push(s[2].toUpperCase()==="001F"?n.toString("utf16le"):pe.decode(n))}return Re(t.join(`
26
+ `))}function sr(e){let t=new Map;for(let[r,n]of e.paths){let s=/^(__attach_version1\.0_#[0-9A-F]{8})\/__substg1\.0_(3707|3704|3701)(001F|0102)$/i.exec(r);if(!s)continue;let i=t.get(s[1])??{};s[2]==="3701"&&s[3]==="0102"?i.data=n:s[2]==="3707"?i.name=n.toString("utf16le").replace(/\0+$/,""):s[2]==="3704"&&(i.short=n.toString("utf16le").replace(/\0+$/,"")),t.set(s[1],i)}return[...t.values()].filter(r=>r.data).map((r,n)=>({name:r.name||r.short||`attachment-${n+1}`,data:r.data}))}function Ft(e,t){let r=Ot(e);if(!r)return{kind:null,reason:"damaged Office 97-2003 file"};let n=gi(r);if(!n)return{kind:null,reason:"a compound file that is not a Word, Excel, PowerPoint or Outlook file"};if(n==="encrypted-ooxml")return{kind:n,reason:$e};let s;try{s=n==="doc"?bi(r):n==="xls"?xi(r):n==="ppt"?wi(r):ki(r)}catch{s={kind:n,reason:"damaged Office 97-2003 file"}}if(typeof s!="string")return s;if(!s.trim()&&!(n==="msg"&&sr(r).length))return{kind:n,reason:"no text inside (an empty file, or only pictures)"};let i=yi(s,t),o=n==="msg"?sr(r):[];return{kind:n,text:i.text,truncated:i.truncated,parts:[`cfb:${n}`],...o.length?{attachments:o}:{}}}var vi=0,Si=2,Ei=4,Ai=5,$i=6,Ri=7,Ti=8,Ii=9,Ci=10,Pi=13,Li=15,Ni=16,Oi=17,Di=18,Fi=19,Mi=156;function*Mt(e){let t=0,r=n=>{let s=0;for(let i=0;i<n;i++){if(t>=e.length)return null;let o=e[t++];if(s|=(o&127)<<7*i,!(o&128))return s>>>0}return s>>>0};for(;t<e.length;){let n=r(2),s=r(4);if(n===null||s===null||t+s>e.length)return;yield[n,e.subarray(t,t+s)],t+=s}}function Ke(e,t){if(t+4>e.length)return"";let r=e.readUInt32LE(t);return r===4294967295?"":e.subarray(t+4,Math.min(e.length,t+4+r*2)).toString("utf16le")}var Ze=e=>Number.isFinite(e)?String(e):"";function or(e){let t=Y(e);if(!t)return null;let r=new Map(t.map(f=>[f.name,f])),n=f=>{let d=r.get(f);return d?J(e,d):null},s=[],i=n("xl/sharedStrings.bin");if(i)for(let[f,d]of Mt(i))f===Fi&&s.push(Ke(d,1));let o=[],a=n("xl/workbook.bin");if(a)for(let[f,d]of Mt(a)){if(f!==Mi||d.length<12)continue;let h=d.readUInt32LE(8),p=12+(h===4294967295?0:h*2);o.push(Ke(d,p))}let c=[...r.keys()].filter(f=>/^xl\/worksheets\/sheet\d+\.bin$/.test(f)).sort((f,d)=>Number(/(\d+)\.bin$/.exec(f)[1])-Number(/(\d+)\.bin$/.exec(d)[1])),l=[];return c.forEach((f,d)=>{let h=n(f);if(!h)return;let p=new Map,g=0,u=-1,y=E=>{if(!E)return;let b=p.get(g)??new Map;b.set(u,E),p.set(g,b)},m=(E,b)=>{E.length>=4&&(u=E.readUInt32LE(0),y(b))},x=E=>{u+=1,y(E)};for(let[E,b]of Mt(h))switch(E){case vi:b.length>=4&&(g=b.readUInt32LE(0),u=-1);break;case Di:x(b.length>=8?s[b.readUInt32LE(4)]??"":"");break;case Oi:x(Ke(b,4));break;case Ni:x(b.length>=12?Ze(b.readDoubleLE(4)):"");break;case Pi:x(b.length>=8?Ze(Te(b.readUInt32LE(4))):"");break;case Li:x(b.length>=5?b[4]?"TRUE":"FALSE":"");break;case 12:case 14:u+=1;break;case Ri:b.length>=12&&m(b,s[b.readUInt32LE(8)]??"");break;case $i:case Ti:m(b,Ke(b,8));break;case Ai:case Ii:b.length>=16&&m(b,Ze(b.readDoubleLE(8)));break;case Si:b.length>=12&&m(b,Ze(Te(b.readUInt32LE(8))));break;case Ei:case Ci:b.length>=9&&m(b,b[8]?"TRUE":"FALSE");break}let _=[...p.keys()].sort((E,b)=>E-b).map(E=>{let b=p.get(E),F=Math.max(...b.keys());return Array.from({length:Math.min(F+1,1024)},(H,P)=>b.get(P)??"").join(" ")});_.length&&l.push([(o[d]||`Sheet${d+1}`).replace(/\s+/g," "),..._].join(`
27
+ `))}),l.length?l.join(`
28
+
29
+ `):null}import{TextDecoder as ar}from"node:util";var ji=new Set(["fonttbl","colortbl","stylesheet","listtable","listoverridetable","rsidtbl","generator","pict","object","objdata","themedata","colorschememapping","datastore","latentstyles","xmlnstbl","mmathpr","filetbl","revtbl","pgdsctbl","bkmkstart","bkmkend","fldinst","shppict","nonshppict","blipuid","panose","falt","wgrffmtfilter","defchp","defpap"]),cr=e=>{try{return new ar(e===65001?"utf-8":`windows-${e}`)}catch{return new ar("windows-1252")}};function Ye(e){return e.length>=5&&e.subarray(0,5).toString("latin1")==="{\\rtf"}function jt(e){let t=cr(1252),r=[],n=[],s=()=>{n.length&&(r.push(t.decode(Uint8Array.from(n))),n=[])},i=[],o=!1,a=1,c=0,l=0,f=e.length;for(;l<f;){let d=e[l];if(d==="{"){s(),i.push({skip:o,uc:a}),l+=1,e.startsWith("\\*",l)&&(o=!0);continue}if(d==="}"){s();let h=i.pop();h&&(o=h.skip,a=h.uc),l+=1;continue}if(d==="\\"){let h=e[l+1];if(h==="'"){let y=parseInt(e.substr(l+2,2),16);if(l+=4,c>0){c-=1;continue}!o&&Number.isFinite(y)&&n.push(y);continue}if(h==="\\"||h==="{"||h==="}"){o||(s(),r.push(h)),l+=2;continue}if(h==="~"){o||r.push(" "),l+=2;continue}let p=/^([a-zA-Z]+)(-?\d+)? ?/.exec(e.slice(l+1,l+40));if(!p){l+=2;continue}l+=1+p[0].length;let g=p[1].toLowerCase(),u=p[2]!==void 0?Number(p[2]):null;if(ji.has(g)){o=!0;continue}g==="ansicpg"&&u?t=cr(u):g==="uc"&&u!==null?a=u:g==="u"&&u!==null?(s(),o||r.push(String.fromCharCode(u<0?u+65536:u)),c=a):!o&&(g==="par"||g==="line"||g==="row"||g==="sect"||g==="page")?(s(),r.push(`
27
30
  `)):!o&&(g==="tab"||g==="cell")&&(s(),r.push(" "));continue}if(d==="\r"||d===`
28
31
  `){l+=1;continue}if(c>0){c-=1,l+=1;continue}o||(s(),r.push(d)),l+=1}return s(),r.join("").replace(/\n{3,}/g,`
29
32
 
30
- `)}var Dt=new Set([".xlsx",".xlsm",".xltx",".xltm",".docx",".docm",".dotx",".dotm",".pptx",".pptm",".ppsx",".ppsm",".potx"]),Ke=new Set([".odt",".ods",".odp",".ott",".ots",".otp"]),Ft=new Set([".doc",".dot",".xls",".xlt",".ppt",".pps",".pot",".msg"]),ir=new Set([".rtf"]);function wi(e){return/^\.(xls[xm]|xlt[xm])$/.test(e)?".xlsx":/^\.(doc[xm]|dot[xm])$/.test(e)?".docx":/^\.(ppt[xm]|pps[xm]|potx)$/.test(e)?".pptx":e}var ue=8*1024*1024,ki=101010256,vi=33639248,Si=67324752;function fe(e){let t=Math.min(e.length,67584),r=-1;for(let o=e.length-22;o>=e.length-t&&o>=0;o-=1)if(e.readUInt32LE(o)===ki){r=o;break}if(r<0)return null;let n=e.readUInt16LE(r+10),s=e.readUInt32LE(r+16);if(s>=e.length)return null;let i=[];for(let o=0;o<n&&!(s+46>e.length||e.readUInt32LE(s)!==vi);o+=1){let a=e.readUInt16LE(s+8),c=e.readUInt16LE(s+10),l=e.readUInt32LE(s+20),p=e.readUInt32LE(s+24),d=e.readUInt16LE(s+28),m=e.readUInt16LE(s+30),f=e.readUInt16LE(s+32),g=e.readUInt32LE(s+42),u=e.subarray(s+46,s+46+d).toString("utf8");i.push({name:u,flags:a,method:c,compSize:l,uncompSize:p,localHeaderOffset:g}),s+=46+d+m+f}return i}function pe(e,t,r=256*1024*1024){let n=t.localHeaderOffset;if(n+30>e.length||e.readUInt32LE(n)!==Si)return null;let s=e.readUInt16LE(n+26),i=e.readUInt16LE(n+28),o=n+30+s+i,a=o+t.compSize;if(a>e.length)return null;let c=e.subarray(o,a);try{if(t.method===0)return c.length<=r?Buffer.from(c):null;if(t.method===8)return xi(c,{maxOutputLength:r})}catch{return null}return null}function Ei(e,t){return pe(e,t)?.toString("utf8")??null}var Ai={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&apos;":"'"};function Z(e){return e.replace(/&(amp|lt|gt|quot|apos);/g,t=>Ai[t]??t).replace(/&#(\d+);/g,(t,r)=>{let n=Number(r);return n>0&&n<1114112?String.fromCodePoint(n):""}).replace(/&#x([0-9a-fA-F]+);/g,(t,r)=>{let n=parseInt(r,16);return n>0&&n<1114112?String.fromCodePoint(n):""})}function $i(e){return Z(e.replace(/<[^>]*>/g,`
33
+ `)}var Ht=new Set([".xlsx",".xlsm",".xltx",".xltm",".docx",".docm",".dotx",".dotm",".pptx",".pptm",".ppsx",".ppsm",".potx"]),Je=new Set([".odt",".ods",".odp",".ott",".ots",".otp"]),Ut=new Set([".doc",".dot",".xls",".xlt",".ppt",".pps",".pot",".msg"]),lr=new Set([".rtf"]);function Ui(e){return/^\.(xls[xm]|xlt[xm])$/.test(e)?".xlsx":/^\.(doc[xm]|dot[xm])$/.test(e)?".docx":/^\.(ppt[xm]|pps[xm]|potx)$/.test(e)?".pptx":e}var q=8*1024*1024,Bi=101010256,zi=33639248,Wi=67324752;function Y(e){let t=Math.min(e.length,67584),r=-1;for(let o=e.length-22;o>=e.length-t&&o>=0;o-=1)if(e.readUInt32LE(o)===Bi){r=o;break}if(r<0)return null;let n=e.readUInt16LE(r+10),s=e.readUInt32LE(r+16);if(s>=e.length)return null;let i=[];for(let o=0;o<n&&!(s+46>e.length||e.readUInt32LE(s)!==zi);o+=1){let a=e.readUInt16LE(s+8),c=e.readUInt16LE(s+10),l=e.readUInt32LE(s+20),f=e.readUInt32LE(s+24),d=e.readUInt16LE(s+28),h=e.readUInt16LE(s+30),p=e.readUInt16LE(s+32),g=e.readUInt32LE(s+42),u=e.subarray(s+46,s+46+d).toString("utf8");i.push({name:u,flags:a,method:c,compSize:l,uncompSize:f,localHeaderOffset:g}),s+=46+d+h+p}return i}function J(e,t,r=256*1024*1024){let n=t.localHeaderOffset;if(n+30>e.length||e.readUInt32LE(n)!==Wi)return null;let s=e.readUInt16LE(n+26),i=e.readUInt16LE(n+28),o=n+30+s+i,a=o+t.compSize;if(a>e.length)return null;let c=e.subarray(o,a);try{if(t.method===0)return c.length<=r?Buffer.from(c):null;if(t.method===8)return Hi(c,{maxOutputLength:r})}catch{return null}return null}function Gi(e,t){return J(e,t)?.toString("utf8")??null}var Vi={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&apos;":"'"};function G(e){return e.replace(/&(amp|lt|gt|quot|apos);/g,t=>Vi[t]??t).replace(/&#(\d+);/g,(t,r)=>{let n=Number(r);return n>0&&n<1114112?String.fromCodePoint(n):""}).replace(/&#x([0-9a-fA-F]+);/g,(t,r)=>{let n=parseInt(r,16);return n>0&&n<1114112?String.fromCodePoint(n):""})}function Xi(e){return G(e.replace(/<[^>]*>/g,`
31
34
  `)).replace(/\n{2,}/g,`
32
- `)}function Ii(e,t,r){let n=new RegExp(`<${t}\\b[^>]*\\b${r}="([^"]*)"`,"g"),s=[],i;for(;(i=n.exec(e))!==null;)i[1]&&s.push(Z(i[1]));return s}function Ri(e,t){let r=[];if(Ke.has(e)){for(let n of t)(n==="content.xml"||n==="styles.xml"||n==="meta.xml")&&r.push(n);return r}e=wi(e);for(let n of t)(n==="docProps/core.xml"||n==="docProps/app.xml")&&r.push(n);if(e===".xlsx"||e===".xlsm")for(let n of t)(n==="xl/sharedStrings.xml"||n==="xl/workbook.xml"||/^xl\/worksheets\/sheet\d+\.xml$/.test(n)||/^xl\/comments\d*\.xml$/.test(n))&&r.push(n);else if(e===".docx")for(let n of t)(n==="word/document.xml"||/^word\/(header|footer|footnotes|endnotes|comments)\d*\.xml$/.test(n))&&r.push(n);else if(e===".pptx")for(let n of t)/^ppt\/(slides|notesSlides)\/(slide|notesSlide)\d+\.xml$/.test(n)&&r.push(n);return r}function Ti(e,t){let r=fe(e);if(!r||r.length===0)return null;let n=new Map(r.map(l=>[l.name,l])),s=Ri(t,r.map(l=>l.name));if(s.length===0)return null;let i=[],o=[],a=0,c=!1;for(let l of s){if(a>=ue){c=!0;break}let p=n.get(l);if(!p)continue;let d=Ei(e,p);if(d===null)continue;let m=$i(d);if(l==="xl/workbook.xml"){let f=Ii(d,"sheet","name");f.length&&(m+=`
33
- `+f.join(`
34
- `))}a+m.length>ue&&(m=m.slice(0,Math.max(0,ue-a)),c=!0),m.trim().length!==0&&(i.push(m),o.push(l),a+=m.length)}return i.length===0?null:{text:i.join(`
35
- `),truncated:c,parts:o}}function or(e,t,r={}){if(Ae(e)){let n=Nt(e,ue);return"text"in n?{ok:!0,result:{text:n.text,truncated:n.truncated,parts:n.parts,attachments:n.attachments}}:{ok:!1,reason:n.reason}}if(Xe(e)){let n=Ot(e.toString("latin1"));if(!n.trim())return{ok:!1,reason:"no text inside (an empty file, or only pictures)"};let s=n.length>ue;return{ok:!0,result:{text:s?n.slice(0,ue):n,truncated:s,parts:["rtf"]}}}if(Dt.has(t)||Ke.has(t)){let n=Ti(e,t);return n?{ok:!0,result:n}:{ok:!1,reason:"damaged, or not really an Office file"}}if(Fe.has(t)){let n=We(e,r);return n?{ok:!0,result:{text:n.text,truncated:n.truncated,parts:[`pdf:${n.engine}`],engine:n.engine,uncertain:n.uncertain}}:{ok:!1,reason:Yn(e)}}return Ft.has(t)?{ok:!1,reason:"not a Word, Excel, PowerPoint or Outlook file inside, despite its name"}:{ok:!1,reason:"unsupported format"}}function jt(e,t,r={}){let n=or(e,t,r);return n.ok?n.result:null}var Mt=new Set([...Dt,...Ke,...Ft,...ir,...Fe]);var Ol=5*6e4,Dl=2*6e4;import{deflateRawSync as Di}from"node:zlib";var ar={israeli_id:"[ID]",credit_card:"[CARD]",iban:"[IBAN]",israeli_phone:"[PHONE]",email:"[EMAIL]"},Ci=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,Pi=[...Et].sort((e,t)=>+(t.subkind==="iban")-+(e.subkind==="iban"));function ne(e,t,r=1){e[t]=(e[t]??0)+r}var cr=null,re=e=>{let t=e.trim();cr&&t&&cr.add(t)};function U(e,t={},r){let n=e;for(let i of Se()){let o=new RegExp(i.pattern.source,i.pattern.flags.includes("g")?i.pattern.flags:i.pattern.flags+"g");n=n.replace(o,a=>(ne(t,"secret"),re(a),"[SECRET]"))}for(let i of Pi)i.pattern.lastIndex=0,n=n.replace(i.pattern,o=>i.validate(o)?(ne(t,i.subkind),re(o),ar[i.subkind]??`[${i.subkind.toUpperCase()}]`):o);n=n.replace(Ci,i=>(ne(t,"email"),re(i),ar.email));let s=r??new Set;for(let i of Ne()){let o=i.find(n).sort((a,c)=>c.start-a.start);for(let a of o){let c=n.slice(a.start,a.end);re(c),i.kind==="name"&&s.add(c.trim()),n=n.slice(0,a.start)+`[${i.kind.toUpperCase()}]`+n.slice(a.end),ne(t,i.kind)}}return s.size&&(n=Ni(n,s,t)),{text:n,counts:t,columnsHidden:[]}}var Li=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function Ni(e,t,r){let n=new Set;for(let i of t){n.add(i);let o=i.split(/\s+/)[0]??"";o.length>=3&&o!==i&&n.add(o)}let s=e;for(let i of[...n].sort((o,a)=>a.length-o.length)){let o=new RegExp(`(?<![\\p{L}\\p{N}@.\\[-])${Li(i)}(?![\\p{L}\\p{N}@\\]-])`,"gu");s=s.replace(o,a=>(ne(r,"name"),re(a),"[NAME]"))}return s}function he(e,t,r={}){let n=e;for(let[s,i]of[...t].sort((o,a)=>a[0].length-o[0].length))n.includes(s)&&(n=n.split(s).join(`[${i.toUpperCase()}]`),ne(r,i),re(s));return n}function Ht(){let e=new Map,t={};return(r,n)=>{re(n);let s=`${r}\0${n.trim()}`,i=e.get(s);return i===void 0&&(i=t[r]=(t[r]??0)+1,e.set(s,i)),`[${r.toUpperCase()}-${i}]`}}function Ze(e){let t=e.trim();return/^\[[A-Z_]+(?:-\d+)?\]$/.test(t)||/^[\d]{0,4}[*•xX]{3,}[\d]{0,4}$/.test(t)}var dr=/^\s*-?\d+(?:\.\d+)?\s*$/;function Ut(e){let t=new Set;for(let[r,n]of e){let s=n.filter(o=>dr.test(o));if(s.length<3)continue;s.filter(o=>U(o).text!==o).length/s.length<.5&&t.add(r)}return t}function lr(e,t){return e.includes(t)||e.includes('"')||e.includes(`
36
- `)?`"${e.replace(/"/g,'""')}"`:e}function Oi(e){let t=(e.match(/\t/g)??[]).length,r=(e.match(/;/g)??[]).length,n=(e.match(/,/g)??[]).length;return t>n&&t>=r?" ":r>n?";":","}function Bt(e,t){let r=e.split(/\r?\n/),n=t??Oi(r[0]??""),s=De(r[0]??"",n),i=s.map(f=>Ee(f)),o={},a=Ht(),c=r.slice(1).map(f=>f===""?null:De(f,n)),l=new Map;for(let f of c)f?.forEach((g,u)=>l.set(u,[...l.get(u)??[],g]));let p=Ut(l),d=ve();if(d){let f=c.filter(g=>g!==null).slice(0,200);for(let g of d({name:"table",headers:s,rows:f})){let u=s.indexOf(g.column);u>=0&&!(g.how==="header"&&p.has(u))&&(i[u]={type:g.type,label:g.category})}}let m=[s.map(f=>lr(f,n)).join(n)];for(let f of c){if(f===null){m.push("");continue}let g=f.map((u,y)=>{let h=i[y];return h&&u.trim()!==""&&!Ze(u)?(ne(o,`column:${h.type}`),a(h.type,u)):p.has(y)&&dr.test(u)?u:U(u,o).text});m.push(g.map(u=>lr(u,n)).join(n))}return{text:m.join(`
37
- `),counts:o,columnsHidden:s.filter((f,g)=>i[g])}}var Fi=/^xl\/(pivotCache|charts|externalLinks)\//,pr=10;function ur(e,t,r=1){e[t]=(e[t]??0)+r}function hr(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function mr(e){let t=e.replace(/<rPh\b[\s\S]*?<\/rPh>/g,""),r="";for(let n of t.matchAll(/<t(?:\s[^>]*)?>([\s\S]*?)<\/t>/g))r+=n[1];return Z(r)}function ji(e){return e?[...e.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>|<si\b[^>]*\/>/g)].map(t=>mr(t[1]??"")):[]}var gr=/<c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/c>)/g;function Ye(e,t){let r=new RegExp(`\\b${t}="([^"]*)"`).exec(e);return r?r[1]:null}function me(e,t){if(e.type==="s"){let n=/<v>([^<]*)<\/v>/.exec(e.inner);return n?t[Number(n[1])]??null:null}if(e.type==="inlineStr"){let n=/<is>([\s\S]*?)<\/is>/.exec(e.inner);return n?mr(n[1]):null}if(e.type==="b"||e.type==="e")return null;let r=/<v>([^<]*)<\/v>/.exec(e.inner);return r?Z(r[1]):null}function Mi(e){let t=[];for(let r of e.matchAll(gr)){let n=Ye(r[1],"r"),s=n?/^([A-Z]+)(\d+)$/.exec(n):null;if(!s)return null;t.push({full:r[0],attrs:r[1],inner:r[2]??"",col:s[1],row:Number(s[2]),type:Ye(r[1],"t")??"n"})}return t}function Hi(e,t){let r=[...new Set(e.map(n=>n.row))].sort((n,s)=>n-s).slice(0,pr);for(let n of r){let s=new Map;for(let i of e.filter(o=>o.row===n)){let o=me(i,t),a=o?Ee(o):null;a&&s.set(i.col,{type:a.type,header:o.trim()})}if(s.size>0)return{row:n,cols:s}}return{row:-1,cols:new Map}}var Ui=/^xl\/worksheets\/sheet\d+\.xml$/,Bi=200;function zi(e){let t=e.trim();return/^[\d.,\-+/:%$₪€\s]+$/.test(t)||t.length>60}function Wi(e,t){let r=[...new Set(e.map(i=>i.row))].sort((i,o)=>i-o).slice(0,pr),n=-1,s=-1/0;for(let i of r){let o=e.filter(l=>l.row===i).map(l=>(me(l,t)??"").trim()).filter(Boolean);if(o.length<2)continue;let a=o.filter(l=>!zi(l)).length,c=a*2-(o.length-a);c>s&&(s=c,n=i)}return n}function Gi(e,t,r){let n=Hi(t,r),s=ve();if(!s)return n;let i=n.row>=0?n.row:Wi(t,r);if(i<0)return n;let o=t.filter(d=>d.row===i).map(d=>({col:d.col,text:(me(d,r)??"").trim()})).filter(d=>d.text),a=new Map(o.map((d,m)=>[d.col,m])),c=new Map;for(let d of t){if(d.row<=i)continue;let m=a.get(d.col);if(m!==void 0){if(!c.has(d.row)){if(c.size>=Bi)continue;c.set(d.row,o.map(()=>""))}c.get(d.row)[m]=me(d,r)??""}}let l=new Map(i===n.row?n.cols:[]),p=o.map(d=>d.text);for(let d of s({name:e,headers:p,rows:[...c.values()]})){let m=p.indexOf(d.column);m<0||l.set(o[m].col,{type:d.type,header:d.column,category:d.category,severity:d.severity,how:d.how})}return{row:i,cols:l}}function zt(e,t){return`<c${e.replace(/\s*\bt="[^"]*"/,"")} t="inlineStr"><is><t xml:space="preserve">${hr(t)}</t></is></c>`}var Vi=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t+=1){let r=t;for(let n=0;n<8;n+=1)r=r&1?3988292384^r>>>1:r>>>1;e[t]=r>>>0}return e})();function Xi(e){let t=4294967295;for(let r=0;r<e.length;r+=1)t=Vi[(t^e[r])&255]^t>>>8;return(t^4294967295)>>>0}var fr=33;function Wt(e){let t=[],r=[],n=0;for(let o of e){let a=Buffer.from(o.name,"utf8"),c=o.name.endsWith("/"),l=c?Buffer.alloc(0):Di(o.data),p=c?0:8,d=c?0:Xi(o.data),m=Buffer.alloc(30);m.writeUInt32LE(67324752,0),m.writeUInt16LE(20,4),m.writeUInt16LE(2048,6),m.writeUInt16LE(p,8),m.writeUInt16LE(fr,12),m.writeUInt32LE(d,14),m.writeUInt32LE(l.length,18),m.writeUInt32LE(o.data.length,22),m.writeUInt16LE(a.length,26),t.push(m,a,l);let f=Buffer.alloc(46);f.writeUInt32LE(33639248,0),f.writeUInt16LE(20,4),f.writeUInt16LE(20,6),f.writeUInt16LE(2048,8),f.writeUInt16LE(p,10),f.writeUInt16LE(fr,14),f.writeUInt32LE(d,16),f.writeUInt32LE(l.length,20),f.writeUInt32LE(o.data.length,24),f.writeUInt16LE(a.length,28),f.writeUInt32LE(n,42),r.push(f,a),n+=m.length+a.length+l.length}let s=Buffer.concat(r),i=Buffer.alloc(22);return i.writeUInt32LE(101010256,0),i.writeUInt16LE(e.length,8),i.writeUInt16LE(e.length,10),i.writeUInt32LE(s.length,12),i.writeUInt32LE(n,16),Buffer.concat([...t,s,i])}function Gt(e,t){let r=fe(e);if(!r||r.length===0||r.some(h=>Fi.test(h.name)))return null;let n=new Map;for(let h of r){if(h.name.endsWith("/")){n.set(h.name,Buffer.alloc(0));continue}let x=pe(e,h);if(!x)return null;n.set(h.name,x)}let s=[...n.keys()].filter(h=>Ui.test(h));if(s.length===0)return null;let i=n.get("xl/sharedStrings.xml")?.toString("utf8")??null,o=ji(i),a=new Set,c={},l=new Set,p=Ht(),d=kt();for(let h of s){let x=n.get(h).toString("utf8"),b=Mi(x);if(!b)return null;let R=Gi(h.replace(/^xl\/worksheets\//,"").replace(/\.xml$/,""),b,o),S=R.row,j=new Map;for(let N of b){if(N.type!=="n"||N.row<=S)continue;let L=me(N,o);L!==null&&j.set(N.col,[...j.get(N.col)??[],L])}let W=Ut(j),P=new Map;for(let[N,{type:L,header:M,how:H}]of R.cols)H==="header"&&W.has(N)||(P.set(N,L),l.add(M));let V=x.replace(gr,(N,L,M)=>{let H=Ye(L,"r"),[,K,_]=/^([A-Z]+)(\d+)$/.exec(H),w={full:N,attrs:L,inner:M??"",col:K,row:Number(_),type:Ye(L,"t")??"n"},A=me(w,o),T=()=>{if(w.type==="s"){let Rn=/<v>([^<]*)<\/v>/.exec(w.inner);Rn&&a.add(Number(Rn[1]))}return N};if(A===null||A.trim()==="")return T();if(d&&w.type==="n"&&W.has(K)&&w.row>S)return ur(c,"amount"),zt(L,"[AMOUNT]");let E=P.get(K);if(E&&w.row>S&&!Ze(A))return ur(c,`column:${E}`),zt(L,p(E,A));if(w.type==="n"&&W.has(K))return T();let ee=U(A,c),ke=t?.size?he(ee.text,t,c):ee.text;return ke===A?T():zt(L,ke)});n.set(h,Buffer.from(V,"utf8"))}if(i){let h=-1,x=i.replace(/<si\b[^>]*>[\s\S]*?<\/si>|<si\b[^>]*\/>/g,b=>(h+=1,a.has(h)?b:"<si><t>[HIDDEN]</t></si>"));n.set("xl/sharedStrings.xml",Buffer.from(x,"utf8"))}for(let h of[...n.keys()].filter(x=>/^xl\/comments\d*\.xml$/.test(x))){let b=n.get(h).toString("utf8").replace(/(<t(?:\s[^>]*)?>)([\s\S]*?)(<\/t>)/g,(R,S,j,W)=>{let P=U(Z(j),c);return`${S}${hr(t?.size?he(P.text,t,c):P.text)}${W}`});n.set(h,Buffer.from(b,"utf8"))}let m=n.get("docProps/core.xml");if(m){let h=m.toString("utf8").replace(/(<dc:creator>)[\s\S]*?(<\/dc:creator>)/,"$1$2").replace(/(<cp:lastModifiedBy>)[\s\S]*?(<\/cp:lastModifiedBy>)/,"$1$2");n.set("docProps/core.xml",Buffer.from(h,"utf8"))}let f=n.get("xl/workbook.xml");if(f){let h=f.toString("utf8").replace(/<(\w+:)?absPath\b[^>]*\/>|<(\w+:)?absPath\b[^>]*>[\s\S]*?<\/(\w+:)?absPath>/g,"");n.set("xl/workbook.xml",Buffer.from(h,"utf8"))}let g=n.get("docProps/app.xml");if(g){let h=g.toString("utf8").replace(/(<Company>)[\s\S]*?(<\/Company>)/,"$1$2").replace(/(<Manager>)[\s\S]*?(<\/Manager>)/,"$1$2");n.set("docProps/app.xml",Buffer.from(h,"utf8"))}let u=n.has("xl/calcChain.xml"),y=r.map(h=>h.name).filter(h=>!(u&&h==="xl/calcChain.xml"));if(u)for(let h of["[Content_Types].xml","xl/_rels/workbook.xml.rels"]){let x=n.get(h);x&&n.set(h,Buffer.from(x.toString("utf8").replace(/<(Override|Relationship)\b[^>]*calcChain[^>]*\/>/g,""),"utf8"))}return{bytes:Wt(y.map(h=>({name:h,data:n.get(h)}))),counts:c,columnsHidden:[...l]}}var ge=/(^|\/)(\.env(\.[\w.-]+)?|[\w.-]+\.env(\.[\w.-]+)?)$/i,Ki=/(SECRET|PASSWORD|PASSWD|PASS|PWD|TOKEN|PRIVATE|CREDENTIAL|API_?KEY|_KEY|KEY_ID|DSN|DATABASE_URL|_URI|POOLER_URL|SALT|PEPPER)$/i,Zi=/(^NEXT_PUBLIC_|^VITE_|^EXPO_PUBLIC_|ANON_KEY$|PUBLISHABLE_KEY$|PUBLIC_KEY$)/i;function Vt(e){let t=0;for(let r of e.split(/\r?\n/)){let n=/^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/.exec(r);if(!n||!Ki.test(n[1])||Zi.test(n[1]))continue;let s=n[2].trim().replace(/^(['"])(.*)\1$/,"$2");s.length>=8&&!/^\$\{?[A-Z_]+\}?$/.test(s)&&t++}return t}var Id=64*1024*1024,Rd=4*1024*1024;var Td=512*1024*1024,Cd=1024*1024*1024;var Pd=256*1024*1024;var Ld=new br("utf-8",{fatal:!0}),Nd=new br("windows-1255");var Od=new Set([".cache",".cargo",".rustup",".npm",".pnpm-store",".yarn",".gradle",".m2",".nuget",".conda",".pyenv",".rbenv",".nvm",".volta",".bun",".deno",".docker",".android",".vscode-server",".agents",".agent",".codeium",".continue","antigravity",".antigravity","__pycache__",".venv","venv","site-packages",".next",".turbo",".expo",".nx",".parcel-cache",".svelte-kit","appdata",".trash","$recycle.bin"].map(e=>e.toLowerCase()));var Xd=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=","base64");var ao=["Put the new key where the app reads it (for a developer machine: the NoData vault + nodata_run, not a .env file).","Check that the app still works with the new key.","Only then delete / revoke the OLD key \u2014 until you do, whoever copied it can still use it."],$=(e,t,r)=>({provider:e,url:t,steps:[...r,...ao]}),co={"aws-access-key":$("AWS","https://console.aws.amazon.com/iam/home#/security_credentials",["Open IAM \u2192 your user \u2192 Security credentials.","Create a NEW access key (you see its secret once \u2014 keep it only in the vault)."]),"aws-secret-key":$("AWS","https://console.aws.amazon.com/iam/home#/security_credentials",["Open IAM \u2192 your user \u2192 Security credentials.","Create a NEW access key (you see its secret once \u2014 keep it only in the vault).","Mark the old key Inactive before deleting it."]),"gcp-api-key":$("Google Cloud","https://console.cloud.google.com/apis/credentials",["Open APIs & Services \u2192 Credentials.","Pick the key \u2192 Regenerate key (or create a new one and restrict it to the APIs you use)."]),"gcp-service-account":$("Google Cloud (service account)","https://console.cloud.google.com/iam-admin/serviceaccounts",["Open IAM & Admin \u2192 Service accounts \u2192 the account \u2192 Keys.","Add key \u2192 Create new key (JSON). Keep the file out of Git and out of shared folders."]),"firebase-key":$("Firebase / Google Cloud","https://console.cloud.google.com/apis/credentials",["A Firebase web key is meant to be public \u2014 restrict it instead: Credentials \u2192 the key \u2192 Application restrictions (your domains only).","If it is not a web key, regenerate it."]),"github-token":$("GitHub","https://github.com/settings/tokens",["Open Settings \u2192 Developer settings \u2192 Personal access tokens.","Generate a new token with only the scopes you need."]),"github-fine-grained":$("GitHub","https://github.com/settings/tokens?type=beta",["Open Fine-grained tokens.","Regenerate the token (or create a new one for only the repositories you need)."]),"gitlab-token":$("GitLab","https://gitlab.com/-/user_settings/personal_access_tokens",["Open Access tokens.","Create a new token with only the scopes you need."]),"stripe-secret":$("Stripe","https://dashboard.stripe.com/apikeys",["Open Developers \u2192 API keys.","Roll the secret key (Stripe can keep the old one alive for a short overlap)."]),"stripe-restricted":$("Stripe","https://dashboard.stripe.com/apikeys",["Open Developers \u2192 API keys \u2192 Restricted keys.","Roll the key, or create a new restricted key."]),"slack-token":$("Slack","https://api.slack.com/apps",["Open your app \u2192 OAuth & Permissions.","Rotate / reinstall to get a new token."]),"slack-webhook":$("Slack","https://api.slack.com/apps",["Open your app \u2192 Incoming Webhooks.","Add a new webhook URL for the channel."]),"twilio-api-key":$("Twilio","https://console.twilio.com/us1/account/keys-credentials/api-keys",["Open Account \u2192 API keys & tokens.","Create a new API key."]),"sendgrid-api-key":$("SendGrid","https://app.sendgrid.com/settings/api_keys",["Open Settings \u2192 API Keys.","Create a new key with only the permissions you need."]),"openai-key":$("OpenAI","https://platform.openai.com/api-keys",["Open API keys.","Create a new secret key."]),"openai-project-key":$("OpenAI","https://platform.openai.com/api-keys",["Open API keys (per project).","Create a new secret key for the same project."]),"anthropic-key":$("Anthropic","https://console.anthropic.com/settings/keys",["Open Settings \u2192 API keys.","Create a new key."]),"supabase-key":$("Supabase","https://supabase.com/dashboard/project/_/settings/api-keys",["Open the project \u2192 Project Settings \u2192 API Keys.","Create a new SECRET key (a service_role / secret key bypasses every database rule \u2014 treat it like a root password).","Older projects with JWT keys: rotating the JWT secret replaces every key and signs everyone out \u2014 plan it."]),"supabase-access-token":$("Supabase (personal access token \u2014 reaches every project of the account)","https://supabase.com/dashboard/account/tokens",["Open Account \u2192 Access Tokens.","Revoke this token, then generate a new one only where it is needed (CLI, MCP) \u2014 prefer a read-only MCP."]),"supabase-secret-key":$("Supabase","https://supabase.com/dashboard/project/_/settings/api-keys",["Open the project \u2192 Project Settings \u2192 API Keys.","Create a new secret key, switch your servers to it, then delete this one."]),"postgres-uri":$("PostgreSQL (the password in the connection string)","https://supabase.com/dashboard/project/_/settings/database",["Change the database user's password: in Supabase \u2192 Project Settings \u2192 Database \u2192 Reset password; elsewhere, your host's console or ALTER USER \u2026 WITH PASSWORD.","Update the connection string with the new password."]),"mongodb-uri":$("MongoDB","https://cloud.mongodb.com/",["Open Atlas \u2192 Database Access \u2192 the user \u2192 Edit \u2192 Edit password.","Update the connection string."]),"redis-uri":$("Redis","",["Reset the password in your Redis host's console (or CONFIG SET requirepass on your own server).","Update the connection string."]),"private-key":$("Private key (SSH / TLS / signing)","",["Generate a new key pair.","Register the new PUBLIC key where the old one was trusted (server authorized_keys, certificate, service settings)."]),"jwt-secret":$("Your app's JWT secret","",["Set a new long random secret in the app's configuration.","Every signed-in user will be signed out \u2014 plan the moment."]),"password-in-code":$("A password in code","",["Change the password in the system it belongs to."]),"bearer-token":$("An access token","",["Revoke the token in the service that issued it and issue a new one."])},lo=$("A credential","",["Find the service it belongs to and issue a new credential there."]);function Xt(e){return co[e]??lo}var ou=768*1024*1024;var fo=8*1024*1024;function kr(e){return/\.ndc$/i.test(e)||/\.clean\.[A-Za-z0-9]+$/.test(e)||po(e)}function po(e){return/(^|[\\/])\.nodata[\\/]/.test(e)}import{existsSync as ho,mkdirSync as gf,readFileSync as mo,statSync as Kt,writeFileSync as yf}from"node:fs";import{homedir as go}from"node:os";import{join as yo}from"node:path";var bo=()=>yo(go(),".nodata","flagged.json");var vr="unread";function Sr(e){let t=e.replace(/\\/g,"/");return process.platform==="win32"?t.toLowerCase():t}var Re=null;function Er(){let e=bo();try{if(!ho(e))return{};let t=Kt(e).mtimeMs;if(Re&&Re.path===e&&Re.mtimeMs===t)return Re.store;let r=JSON.parse(mo(e,"utf8"));return Re={path:e,mtimeMs:t,store:r},r}catch{return{}}}function Je(e){let t=Er()[Sr(e)];if(!t)return null;try{if(Kt(e).mtimeMs>t.mtimeMs+1e3)return null}catch{return null}let r=Object.fromEntries(Object.entries(t.kinds).filter(([n])=>n!==vr));return Object.keys(r).length?r:null}function qe(e){let t=Er()[Sr(e)];if(!t||!t.kinds[vr])return null;try{return{changed:Kt(e).mtimeMs>t.mtimeMs+1e3}}catch{return null}}import{existsSync as Ar,mkdirSync as kf,readFileSync as $r,writeFileSync as vf}from"node:fs";import{homedir as _o}from"node:os";import{join as xo}from"node:path";var Qe=()=>xo(_o(),".nodata","prefs.json");function wo(){try{let e=Ar(Qe())?JSON.parse($r(Qe(),"utf8")).lang:null;return e==="he"||e==="en"?e:null}catch{return null}}function ko(){let t=process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"";try{t||=Intl.DateTimeFormat().resolvedOptions().locale}catch{}return/^(he|iw)(?:[-_.@]|$)/i.test(t)?"he":"en"}function Y(){return wo()??ko()}function Ir(){try{return Ar(Qe())&&JSON.parse($r(Qe(),"utf8")).amounts_sensitive===!0}catch{return!1}}function I(e,t,r=Y()){return r==="he"?e:t}import{createHmac as Fo,randomBytes as jo}from"node:crypto";import{existsSync as qt,mkdirSync as Mo,readdirSync as Ho,readFileSync as Qt,writeFileSync as Uo}from"node:fs";import{homedir as at}from"node:os";import{basename as Bo,extname as zo,isAbsolute as Wo,join as ct,relative as Go,resolve as Vo}from"node:path";function se(e){return typeof e=="number"&&Number.isFinite(e)?e:typeof e=="string"&&e.trim()!==""&&!Number.isNaN(Number(e))?Number(e):null}function vo(e,t,r){return t===null||r===null?!1:t<=r?e>=t&&e<=r:e>=t||e<=r}function Rr(e,t,r){switch(t){case"eq":return e===r;case"ne":return e!==r;case"in":return Array.isArray(r)&&r.includes(e);case"not_in":return Array.isArray(r)&&!r.includes(e);case"prefix":return typeof e=="string"&&typeof r=="string"&&e.toLowerCase().startsWith(r.toLowerCase());case"gte":{let n=se(e),s=se(r);return n!==null&&s!==null&&n>=s}case"lte":{let n=se(e),s=se(r);return n!==null&&s!==null&&n<=s}case"between":{let n=se(e);return n!==null&&Array.isArray(r)&&r.length===2&&vo(n,se(r[0]),se(r[1]))}default:return!1}}function Tr(e,t,r){switch(t){case"in":return Array.isArray(r)&&e.some(n=>r.includes(n));case"not_in":return Array.isArray(r)&&!e.some(n=>r.includes(n));default:return!1}}import{existsSync as et,mkdirSync as Rf,readdirSync as Cr,readFileSync as So,rmSync as Tf,writeFileSync as Cf,chmodSync as Pf}from"node:fs";import{homedir as Pr}from"node:os";import{basename as Of,isAbsolute as Eo,join as ie,relative as Ao,resolve as $o}from"node:path";var rt=()=>ie(Pr(),".nodata"),Io=()=>ie(rt(),"credentials.json"),tt=()=>ie(rt(),"orgs"),Ro=()=>ie(rt(),"bindings.json"),To=/^[A-Za-z0-9_.-]{1,80}$/,Zt=e=>To.test(e)&&e!=="."&&e!=="..";function Lr(e){try{return et(e)?JSON.parse(So(e,"utf8")):null}catch{return null}}function Co(e){return e?e.device?.org_id?e.device.org_id:e.api_key?`key-${(e.key_prefix??e.api_key.slice(0,12)).replace(/[^A-Za-z0-9_-]/g,"")}`:null:null}function Nr(){return Co(Lr(Io()))}function Yt(){let e=[],t=Nr();t&&e.push(t);try{for(let r of Cr(tt()))Zt(r)&&!e.includes(r)&&et(ie(tt(),r,"credentials.json"))&&e.push(r)}catch{}return e}var Po=e=>process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e,nt=e=>Po($o(e.replace(/^~(?=[\\/]|$)/,Pr())));function Lo(e,t){let r=Ao(nt(e),nt(t));return r===""||!r.startsWith("..")&&!Eo(r)}function J(){let e=Lr(Ro());return(Array.isArray(e?.bindings)?e.bindings:[]).filter(r=>!!r&&typeof r.folder=="string"&&typeof r.org_id=="string"&&Zt(r.org_id)).map(r=>r.project===void 0||Do(r.project)===r.project?r:{...r,project:void 0}).map(r=>r.client===void 0||typeof r.client?.org_id=="string"&&No.test(r.client.org_id)?r:{...r,client:void 0})}var No=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Or(e,t=J()){let r=null;for(let n of t)Lo(n.folder,e)&&(!r||nt(n.folder).length>nt(r.folder).length)&&(r=n);return r}function Oo(e,t=Yt(),r=J()){if(t.length===0)return{kind:"none"};let n=Or(e,r.filter(s=>t.includes(s.org_id)));return n?{kind:"bound",org_id:n.org_id,folder:n.folder}:t.length===1?{kind:"only",org_id:t[0]}:{kind:"unbound",orgs:t}}function Dr(e){let t=Oo(e);return t.kind==="bound"||t.kind==="only"?t.org_id:null}function Do(e){if(typeof e!="string")return null;let t=e.trim();return t&&t.length<=120&&!/[\u0000-\u001f\\/]/.test(t)?t:null}function Fr(){let e=[],t=ie(rt(),"org-mandate.json");et(t)&&e.push({owner:Nr(),file:t});try{for(let r of Cr(tt())){let n=ie(tt(),r,"org-mandate.json");Zt(r)&&et(n)&&e.push({owner:r,file:n})}}catch{}return e}function st(e,t,r=J()){if(!e)return!0;let n=Or(t,r);return!n||n.org_id===e}var jr=()=>ct(at(),".nodata","rules.json"),it=()=>ct(at(),".nodata","rules-key"),oe={allow:0,ask:1,clean_copy:2,deny:3},Xo=["claude-code","cursor","windsurf","codex","gemini","vscode","claude-desktop"],Jt=e=>typeof e=="string"&&e.trim()?e.trim().toLowerCase():void 0,Ko={action:{cardinality:"scalar",ops:["eq","ne","in","not_in"],enumValues:["read","search","run","write","browse","interact"],label:"what the agent does (read, search, run, write; on a site: browse, interact)",extract:e=>e.action},"time.hour":{cardinality:"scalar",ops:["between","gte","lte","eq"],label:"hour on this computer (0-23; 18..6 wraps overnight)",extract:e=>e.now.getHours()},"time.weekday":{cardinality:"scalar",ops:["in","not_in","between","eq"],label:"weekday on this computer (0 Sunday \u2026 6 Saturday)",extract:e=>e.now.getDay()},"file.ext":{cardinality:"scalar",ops:["eq","ne","in","not_in"],label:"file type (.xlsx, .pdf, .env \u2026)",extract:e=>zo(e.path).toLowerCase()||void 0},"file.name":{cardinality:"scalar",ops:["eq","in","prefix"],label:"file name",extract:e=>Bo(e.path).toLowerCase()},agent:{cardinality:"scalar",ops:["eq","ne","in","not_in"],agentScope:!0,label:`which agent (${Xo.join(", ")} \u2026)`,extract:e=>Jt(e.who?.host)},"agent.type":{cardinality:"scalar",ops:["eq","ne","in","not_in"],agentScope:!0,label:"sub-agent type inside the agent (main = the main conversation; general-purpose, explore \u2026)",extract:e=>Jt(e.who?.type)},org:{cardinality:"scalar",ops:["eq","ne","in","not_in"],agentScope:!0,label:"which organisation the agent works for (the one its folder is bound to)",extract:e=>Jt(e.who?.org)}};function Zo(){try{if(qt(it())){let t=Qt(it(),"utf8").trim();if(/^[0-9a-f]{64}$/.test(t))return Buffer.from(t,"hex")}}catch{}let e=jo(32);return Mo(ct(at(),".nodata"),{recursive:!0}),Uo(it(),e.toString("hex")+`
38
- `,{mode:384}),e}var Yo=(e,t)=>Fo("sha256",t).update(JSON.stringify(e)).digest("hex");function en(){if(!qt(jr()))return{rules:[],tampered:!1};try{let e=JSON.parse(Qt(jr(),"utf8")),t=Array.isArray(e.rules)?e.rules:[],r=qt(it())&&typeof e.mac=="string"&&e.mac===Yo(t,Zo());return{rules:t,tampered:!r}}catch{return{rules:[],tampered:!0}}}var Te=e=>{let t=Vo(e.replace(/^~(?=[\\/]|$)/,at())).replace(/\\/g,"/");return process.platform==="win32"?t.toLowerCase():t};function ae(e,t){if(Mr(e)||Mr(t))return!1;if(e.startsWith("**/")){let n=e.slice(3).replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase(),s=Te(t).toLowerCase();return s.endsWith("/"+n)||s.includes("/"+n+"/")}let r=Go(Te(e),Te(t));return r===""||!r.startsWith("..")&&!Wo(r)}var Jo="site:",Mr=e=>e.startsWith(Jo);function tn(e){try{let t=new URL(e.trim());return(t.protocol==="http:"||t.protocol==="https:")&&t.hostname.toLowerCase().replace(/\.$/,"")||null}catch{return null}}function nn(e,t){return e==="*"?!0:t===e||t.endsWith("."+e)}function ot(e,t,r){let n=Ko[e.field];if(!n)return!1;let s=n.extract(t);return n.agentScope&&s===void 0?r!=="allow":e.op==="exists"?s!==void 0&&s!=="":s===void 0?!1:n.cardinality==="set"?Tr(Array.isArray(s)?s:[],e.op,e.value):Rr(s,e.op,e.value)}function lt(e,t){let r=e.map((n,s)=>({rule:n,n:s+1})).filter(n=>ae(n.rule.path,t.path)).sort((n,s)=>Te(s.rule.path).length-Te(n.rule.path).length||n.n-s.n);for(let n of r)if((n.rule.when??[]).every(s=>ot(s,t,n.rule.effect)))return{...n,touched:t.path};return null}function dt(e,t,r,n,s){let i=null;for(let[o,a]of e.entries())ae(a.path,t)||(a.path.startsWith("**/")?!qo(t,a.path):!ae(t,a.path))||(a.when??[]).every(c=>ot(c,{action:r,path:a.path,now:n,who:s},a.effect))&&(!i||oe[a.effect]>oe[i.rule.effect])&&(i={rule:a,n:o+1,touched:a.path});return i}function rn(e,t){let r=i=>i==="*"?0:i.length,n=t.site,s=e.map((i,o)=>({rule:i,n:o+1})).filter(i=>i.rule.site&&(n===void 0||nn(i.rule.site,n))).sort((i,o)=>r(o.rule.site)-r(i.rule.site)||i.n-o.n);if(n===void 0){let i=null;for(let o of s)o.rule.effect==="allow"||!(o.rule.when??[]).every(a=>ot(a,t,o.rule.effect))||(!i||oe[o.rule.effect]>oe[i.rule.effect])&&(i=o);return i?{...i,touched:""}:null}for(let i of s)if((i.rule.when??[]).every(o=>ot(o,t,i.rule.effect)))return{...i,touched:n};return null}function qo(e,t){let r=0,n=(s,i)=>{if(i>5||r>4e3)return!1;let o;try{o=Ho(s,{withFileTypes:!0})}catch{return!1}for(let a of o){if(++r>4e3||!a.isDirectory()||a.name==="node_modules"||a.name===".git")continue;let c=ct(s,a.name);if(ae(t,c)||n(c,i+1))return!0}return!1};return n(e,0)}var Qo={allow:["allowed","\u05DE\u05D5\u05EA\u05E8"],ask:["ask the person","\u05DC\u05E9\u05D0\u05D5\u05DC \u05D0\u05D5\u05EA\u05DA"],clean_copy:["clean copy only","\u05E8\u05E7 \u05E2\u05D5\u05EA\u05E7 \u05E0\u05E7\u05D9"],deny:["not allowed","\u05D0\u05E1\u05D5\u05E8"]};function Hr(e,t=!1){return e.site?e.site==="*"?t?"\u05DB\u05DC \u05D0\u05EA\u05E8":"every site":`${t?"\u05D0\u05EA\u05E8":"site"} ${e.site}`:e.path}var Ur=(e,t=!1)=>Qo[e][t?1:0];function sn(){let e=[];for(let{owner:t,file:r}of Fr())try{let n=JSON.parse(Qt(r,"utf8"));Array.isArray(n?.folder_rules)&&n.folder_rules.length&&e.push({owner:t,rules:n.folder_rules})}catch{}return e}function Br(){let e=Yt();return e.length<2?[]:J().filter(t=>e.includes(t.org_id)).map(t=>({path:t.folder,effect:"deny",when:[{field:"org",op:"ne",value:t.org_id.toLowerCase()}],note:`works for organisation ${t.org_id}; another organisation's agent does not touch it`}))}import{closeSync as ea,mkdirSync as ta,openSync as na,readdirSync as ra,readFileSync as sa,rmSync as ia,statSync as oa,writeSync as aa}from"node:fs";import{createHash as ca}from"node:crypto";import{homedir as la}from"node:os";import{join as on}from"node:path";var da=()=>on(la(),".nodata","gate-calls"),ua=5e3,fa=600*1e3;function pa(e){try{let t=Date.now();for(let r of ra(e)){let n=on(e,r);t-oa(n).mtimeMs>fa&&ia(n,{force:!0})}}catch{}}async function an(e,t,r){if(!e)return{value:r(),first:!0};let n=da(),s=on(n,ca("sha256").update(`${t}\0${e}`).digest("hex").slice(0,32)+".json"),i;try{ta(n,{recursive:!0,mode:448}),i=na(s,"wx",384)}catch{let a=Date.now()+ua;for(;Date.now()<a;){try{let c=sa(s,"utf8");if(c)return{value:JSON.parse(c),first:!1}}catch{}await new Promise(c=>setTimeout(c,40))}return{value:r(),first:!0}}let o=r();try{aa(i,JSON.stringify(o??null))}finally{ea(i)}return Math.random()<.05&&pa(n),{value:o,first:!0}}import{createHash as ha}from"node:crypto";import{existsSync as ma,mkdirSync as ga,readFileSync as Wr,writeFileSync as ya}from"node:fs";import{homedir as ln}from"node:os";import{join as dn}from"node:path";var Gr=()=>dn(ln(),".nodata","checkpoints.json"),zr=()=>dn(ln(),".nodata","connection.json"),ba=900*1e3,_a=300*1e3,xa=100;function cn(e){return Array.isArray(e)?e.map(cn):e&&typeof e=="object"?Object.fromEntries(Object.keys(e).sort().map(t=>[t,cn(e[t])])):e}function un(e,t,r,n){return ha("sha256").update(JSON.stringify([e,t,r,cn(n)])).digest("hex").slice(0,12)}var wa=/^(element|selector|ref|uid|target|name|label|button|key|role|title|description|link|url|href|uri|startUrl|start_url|page_url)$/i;function fn(e){let t=[];for(let[r,n]of Object.entries(e)){if(!wa.test(r)||typeof n!="string"&&typeof n!="number")continue;let s=String(n);if(/^https?:\/\//i.test(s))try{let i=new URL(s);s=`${i.origin}${i.pathname}`}catch{continue}if(t.push(`${r}: ${s.replace(/[\r\n]+/g," ").slice(0,120)}`),t.length>=4)break}return t.join(" \xB7 ").slice(0,300)}function Vr(){try{let e=JSON.parse(Wr(Gr(),"utf8")),t=Date.now(),r={};for(let[n,s]of Object.entries(e??{})){if(!s||typeof s.at!="number")continue;(s.passed_at?t-s.passed_at<_a:t-s.at<ba)&&(r[n]=s)}return r}catch{return{}}}function Xr(e){let t=Object.entries(e).sort((r,n)=>n[1].at-r[1].at).slice(0,xa);ga(dn(ln(),".nodata"),{recursive:!0}),ya(Gr(),JSON.stringify(Object.fromEntries(t))+`
39
- `,{mode:384})}function pn(e){try{let t=Vr(),r=t[e.id];t[e.id]={...r,...e,at:r&&!r.passed_at?r.at:Date.now()},Xr(t)}catch{}}function hn(e){try{let t=Vr();return t[e]?.passed_at?(delete t[e],Xr(t),!0):!1}catch{return!1}}function mn(){try{if(!ma(zr()))return!1;let e=JSON.parse(Wr(zr(),"utf8")).state;return e==="connected"||e==="reconnecting"||e==="restart"}catch{return!1}}var v=(e,t,r)=>e==="he"?t:r,Kr={safe:0,review:1,destructive:2},Zr=(e,t)=>Kr[t]>Kr[e]?t:e;function ka(e){let t=e.replace(/\/\*[\s\S]*?\*\//g," ");return t=t.replace(/--[^\n]*/g," "),t=t.replace(/\$([A-Za-z_]*)\$[\s\S]*?\$\1\$/g," $$body$$ "),t.split(";").map(r=>r.replace(/\s+/g," ").trim()).filter(Boolean)}var G='("?[\\w.]+"?)',k=e=>e.replace(/"/g,"").replace(/^public\./i,"");function va(e,t,r=!1){let n=[],s=[],i=[],o=[],a=new Set,c=new Set,l=new Set,p=new Map;for(let f of ka(e)){let g=f.toUpperCase(),u;if(u=f.match(new RegExp(`^CREATE (?:UNLOGGED )?TABLE (?:IF NOT EXISTS )?${G}`,"i"))){a.add(k(u[1]).toLowerCase()),i.push(v(t,`\u05D8\u05D1\u05DC\u05D4 \u05D7\u05D3\u05E9\u05D4 ${k(u[1])}`,`new table ${k(u[1])}`));continue}if(u=f.match(new RegExp(`^DROP TABLE (?:IF EXISTS )?${G}`,"i"))){n.push(v(t,`\u05DE\u05D5\u05D7\u05E7 \u05D0\u05EA \u05D4\u05D8\u05D1\u05DC\u05D4 ${k(u[1])} \u05D5\u05DB\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA \u05E9\u05D1\u05D4`,`deletes table ${k(u[1])} and every row in it`));continue}if(/^TRUNCATE/i.test(f)){n.push(v(t,"\u05DE\u05E8\u05D5\u05E7\u05DF \u05D8\u05D1\u05DC\u05D4 (TRUNCATE): \u05DB\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA \u05E0\u05DE\u05D7\u05E7\u05D5\u05EA","empties a table (TRUNCATE): every row is deleted"));continue}if(u=f.match(new RegExp(`^ALTER TABLE (?:IF EXISTS )?(?:ONLY )?${G} (.*)$`,"i"))){let y=k(u[1]),h=u[2];for(let b of h.matchAll(/DROP COLUMN (?:IF EXISTS )?("?[\w]+"?)/gi))n.push(v(t,`\u05DE\u05D5\u05D7\u05E7 \u05D0\u05EA \u05D4\u05E2\u05DE\u05D5\u05D3\u05D4 ${y}.${k(b[1])} \u05D5\u05D4\u05DE\u05D9\u05D3\u05E2 \u05E9\u05D1\u05D4`,`deletes column ${y}.${k(b[1])} and its data`));for(let b of h.matchAll(/ADD COLUMN (?:IF NOT EXISTS )?("?[\w]+"?)\s+([^,]*)/gi)){let R=/NOT NULL/i.test(b[2])&&!/DEFAULT/i.test(b[2])&&!a.has(y.toLowerCase());(R?s:i).push(R?v(t,`\u05E2\u05DE\u05D5\u05D3\u05D4 \u05D7\u05D3\u05E9\u05D4 ${y}.${k(b[1])} \u05D7\u05D5\u05D1\u05D4 \u05D5\u05D1\u05DC\u05D9 \u05D1\u05E8\u05D9\u05E8\u05EA \u05DE\u05D7\u05D3\u05DC: \u05D9\u05D9\u05DB\u05E9\u05DC \u05D0\u05DD \u05D9\u05E9 \u05DB\u05D1\u05E8 \u05E9\u05D5\u05E8\u05D5\u05EA`,`new required column ${y}.${k(b[1])} with no default: fails if rows exist`):v(t,`\u05E2\u05DE\u05D5\u05D3\u05D4 \u05D7\u05D3\u05E9\u05D4 ${y}.${k(b[1])}`,`new column ${y}.${k(b[1])}`))}for(let b of h.matchAll(/ALTER COLUMN ("?[\w]+"?) (?:SET DATA )?TYPE/gi))s.push(v(t,`\u05DE\u05E9\u05E0\u05D4 \u05D0\u05EA \u05D4\u05E1\u05D5\u05D2 \u05E9\u05DC ${y}.${k(b[1])}: \u05DE\u05D9\u05D3\u05E2 \u05E7\u05D9\u05D9\u05DD \u05DE\u05D5\u05DE\u05E8`,`changes the type of ${y}.${k(b[1])}: existing data is converted`));for(let b of h.matchAll(/RENAME (?:COLUMN )?("?[\w]+"?) TO ("?[\w]+"?)/gi))s.push(v(t,`\u05DE\u05E9\u05E0\u05D4 \u05E9\u05DD ${y}.${k(b[1])} \u05DC-${k(b[2])}: \u05E7\u05D5\u05D3 \u05E9\u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05E9\u05DD \u05D4\u05D9\u05E9\u05DF \u05D9\u05D9\u05E9\u05D1\u05E8`,`renames ${y}.${k(b[1])} to ${k(b[2])}: code using the old name breaks`));/DISABLE ROW LEVEL SECURITY/i.test(h)&&n.push(v(t,`\u05DE\u05DB\u05D1\u05D4 \u05D0\u05EA \u05D4\u05D4\u05D2\u05E0\u05D4 \u05E2\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA (RLS) \u05D1\u05D8\u05D1\u05DC\u05D4 ${y}: \u05DB\u05DC \u05DE\u05D9 \u05E9\u05DE\u05D7\u05D5\u05D1\u05E8 \u05E8\u05D5\u05D0\u05D4 \u05D4\u05DB\u05DC`,`turns off row security (RLS) on ${y}: anyone connected sees everything`)),/ENABLE ROW LEVEL SECURITY/i.test(h)&&i.push(v(t,`\u05DE\u05D3\u05DC\u05D9\u05E7 \u05D4\u05D2\u05E0\u05D4 \u05E2\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA (RLS) \u05D1\u05D8\u05D1\u05DC\u05D4 ${y}`,`turns on row security (RLS) on ${y}`));let x=y.toLowerCase();/DROP CONSTRAINT/i.test(h)&&p.set(x,{table:y,drop:!0,add:p.get(x)?.add??!1}),/ADD CONSTRAINT/i.test(h)&&p.set(x,{table:y,drop:p.get(x)?.drop??!1,add:!0});continue}if(u=f.match(new RegExp(`^DELETE FROM (?:ONLY )?${G}(.*)$`,"i"))){let y=/\bWHERE\b/i.test(u[2]);(y?s:n).push(y?v(t,`\u05DE\u05D5\u05D7\u05E7 \u05E9\u05D5\u05E8\u05D5\u05EA \u05DE\u05D4\u05D8\u05D1\u05DC\u05D4 ${k(u[1])} (\u05DC\u05E4\u05D9 \u05EA\u05E0\u05D0\u05D9)`,`deletes rows from ${k(u[1])} (by a condition)`):v(t,`\u05DE\u05D5\u05D7\u05E7 \u05D0\u05EA \u05DB\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA \u05D1\u05D8\u05D1\u05DC\u05D4 ${k(u[1])}`,`deletes every row in ${k(u[1])}`));continue}if(u=f.match(new RegExp(`^UPDATE (?:ONLY )?${G}(.*)$`,"i"))){let y=/\bWHERE\b/i.test(u[2]);(y?s:n).push(y?v(t,`\u05DE\u05E9\u05E0\u05D4 \u05E9\u05D5\u05E8\u05D5\u05EA \u05E7\u05D9\u05D9\u05DE\u05D5\u05EA \u05D1\u05D8\u05D1\u05DC\u05D4 ${k(u[1])} (\u05DC\u05E4\u05D9 \u05EA\u05E0\u05D0\u05D9)`,`changes existing rows in ${k(u[1])} (by a condition)`):v(t,`\u05DE\u05E9\u05E0\u05D4 \u05D0\u05EA \u05DB\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA \u05D1\u05D8\u05D1\u05DC\u05D4 ${k(u[1])}`,`changes every row in ${k(u[1])}`));continue}if(u=f.match(new RegExp(`^INSERT INTO ${G}`,"i"))){o.push(v(t,`\u05DE\u05D5\u05E1\u05D9\u05E3 \u05E9\u05D5\u05E8\u05D5\u05EA \u05DC\u05D8\u05D1\u05DC\u05D4 ${k(u[1])}`,`adds rows to ${k(u[1])}`));continue}if(u=f.match(new RegExp(`^DROP POLICY (?:IF EXISTS )?("[^"]+"|\\S+) ON ${G}`,"i"))){c.add(k(u[2]).toLowerCase());continue}if(u=f.match(new RegExp(`^CREATE POLICY ("[^"]+"|\\S+) ON ${G}`,"i"))){l.add(k(u[2]).toLowerCase()),/\bTO (anon|public)\b/i.test(f)&&/USING \(\s*true\s*\)/i.test(f)&&s.push(v(t,`\u05DB\u05DC\u05DC \u05D2\u05D9\u05E9\u05D4 \u05D1-${k(u[2])} \u05E9\u05E4\u05D5\u05EA\u05D7 \u05D4\u05DB\u05DC \u05DC\u05D0\u05D5\u05E8\u05D7\u05D9\u05DD (anon)`,`an access rule on ${k(u[2])} that opens everything to guests (anon)`));continue}if((u=f.match(/^GRANT (.+) ON (?:TABLE |ALL TABLES IN SCHEMA )?(\S+) TO (.+)$/i))&&/\b(anon|public|authenticated)\b/i.test(u[3])){s.push(v(t,`\u05E0\u05D5\u05EA\u05DF \u05D4\u05E8\u05E9\u05D0\u05D4 (${u[1].trim()}) \u05E2\u05DC ${k(u[2])} \u05DC-${u[3].trim()}`,`grants ${u[1].trim()} on ${k(u[2])} to ${u[3].trim()}`));continue}if(u=f.match(new RegExp(`^DROP (FUNCTION|VIEW|TYPE|TRIGGER|INDEX)(?: IF EXISTS)? ${G}`,"i"))){s.push(v(t,`\u05DE\u05D5\u05D7\u05E7 ${u[1].toLowerCase()} ${k(u[2])}: \u05E7\u05D5\u05D3 \u05E9\u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05D5 \u05D9\u05D9\u05E9\u05D1\u05E8`,`drops ${u[1].toLowerCase()} ${k(u[2])}: code using it breaks`));continue}if(u=f.match(new RegExp(`^CREATE (?:UNIQUE )?INDEX (?:CONCURRENTLY )?(?:IF NOT EXISTS )?\\S+ ON (?:ONLY )?${G}`,"i"))){i.push(v(t,`\u05D0\u05D9\u05E0\u05D3\u05E7\u05E1 \u05E2\u05DC ${k(u[1])}`,`index on ${k(u[1])}`));continue}if(/^CREATE (OR REPLACE )?(FUNCTION|PROCEDURE)/i.test(f)){let y=f.match(/(?:FUNCTION|PROCEDURE) ("?[\w.]+"?)/i)?.[1];(/SECURITY DEFINER/i.test(g)?s:i).push(/SECURITY DEFINER/i.test(g)?v(t,`\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4 ${k(y??"")} \u05E9\u05E8\u05E6\u05D4 \u05D1\u05D4\u05E8\u05E9\u05D0\u05D5\u05EA \u05E9\u05DC \u05D4\u05D1\u05E2\u05DC\u05D9\u05DD (SECURITY DEFINER)`,`function ${k(y??"")} that runs with its owner's rights (SECURITY DEFINER)`):v(t,`\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4 ${k(y??"")}`,`function ${k(y??"")}`));continue}/^CREATE (OR REPLACE )?(VIEW|TRIGGER|TYPE|SCHEMA|EXTENSION)/i.test(f)&&i.push(v(t,f.split(" ").slice(0,4).join(" ").toLowerCase(),f.split(" ").slice(0,4).join(" ").toLowerCase()))}for(let f of c)l.has(f)||s.push(v(t,`\u05DE\u05D5\u05D7\u05E7 \u05DB\u05DC\u05DC \u05D2\u05D9\u05E9\u05D4 \u05D1\u05D8\u05D1\u05DC\u05D4 ${f} \u05D1\u05DC\u05D9 \u05DC\u05D9\u05E6\u05D5\u05E8 \u05D7\u05D3\u05E9`,`drops an access rule on ${f} without creating a new one`));c.size&&[...c].every(f=>l.has(f))&&i.push(v(t,`\u05DE\u05D7\u05DC\u05D9\u05E3 \u05DB\u05DC\u05DC\u05D9 \u05D2\u05D9\u05E9\u05D4 (${[...c].join(", ")})`,`replaces access rules (${[...c].join(", ")})`));for(let{table:f,drop:g,add:u}of p.values())s.push(g&&u?v(t,`\u05DE\u05D7\u05DC\u05D9\u05E3 \u05D0\u05D9\u05DC\u05D5\u05E5 \u05D1\u05D8\u05D1\u05DC\u05D4 ${f}: \u05D9\u05D9\u05DB\u05E9\u05DC \u05D0\u05DD \u05DE\u05D9\u05D3\u05E2 \u05E7\u05D9\u05D9\u05DD \u05DC\u05D0 \u05E2\u05D5\u05DE\u05D3 \u05D1\u05D7\u05D3\u05E9`,`replaces a constraint on ${f}: fails if existing data does not meet the new one`):g?v(t,`\u05DE\u05E1\u05D9\u05E8 \u05D0\u05D9\u05DC\u05D5\u05E5 \u05DE\u05D4\u05D8\u05D1\u05DC\u05D4 ${f}: \u05DE\u05D9\u05D3\u05E2 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D9\u05D5\u05DB\u05DC \u05DC\u05D4\u05D9\u05DB\u05E0\u05E1`,`removes a constraint from ${f}: invalid data can get in`):v(t,`\u05DE\u05D5\u05E1\u05D9\u05E3 \u05D0\u05D9\u05DC\u05D5\u05E5 \u05DC\u05D8\u05D1\u05DC\u05D4 ${f}: \u05D9\u05D9\u05DB\u05E9\u05DC \u05D0\u05DD \u05DE\u05D9\u05D3\u05E2 \u05E7\u05D9\u05D9\u05DD \u05DC\u05D0 \u05E2\u05D5\u05DE\u05D3 \u05D1\u05D5`,`adds a constraint to ${f}: fails if existing data does not meet it`));r&&s.unshift(v(t,"\u05DE\u05E9\u05E0\u05D4 \u05E7\u05D5\u05D1\u05E5 \u05DE\u05D9\u05D2\u05E8\u05E6\u05D9\u05D4 \u05E7\u05D9\u05D9\u05DD: \u05D0\u05DD \u05D4\u05D5\u05D0 \u05DB\u05D1\u05E8 \u05D4\u05D5\u05E8\u05E5 \u05D1\u05E4\u05E8\u05D5\u05D3\u05E7\u05E9\u05DF, \u05D4\u05E9\u05D9\u05E0\u05D5\u05D9 \u05DC\u05D0 \u05D9\u05E8\u05D5\u05E5 \u05E9\u05D5\u05D1","edits an existing migration file: if it already ran in production, the change will not run again")),/--\s*Rollback/i.test(e)||s.push(v(t,"\u05D0\u05D9\u05DF \u05D4\u05E2\u05E8\u05EA Rollback (\u05D0\u05D9\u05DA \u05D7\u05D5\u05D6\u05E8\u05D9\u05DD \u05D0\u05D7\u05D5\u05E8\u05D4)","no Rollback note (how to undo it)"));let d="safe";s.length&&(d=Zr(d,"review")),n.length&&(d=Zr(d,"destructive"));let m=[...new Set([...n,...s,...o,...i])];return{risk:d,lines:m.length?m:[v(t,"\u05DC\u05D0 \u05D6\u05D5\u05D4\u05D5 \u05E4\u05E7\u05D5\u05D3\u05D5\u05EA \u05DE\u05D5\u05DB\u05E8\u05D5\u05EA \u05D1\u05E7\u05D5\u05D1\u05E5","no known statements found in the file")]}}function Sa(e,t){let r=[],n="review",s=[...new Set([...e.matchAll(/secrets\.([A-Z0-9_]+)/g)].map(o=>o[1]).filter(o=>o!=="GITHUB_TOKEN"))];/\bpull_request_target\b/.test(e)&&(n="destructive",r.push(v(t,"\u05E8\u05E5 \u05E2\u05DC pull_request_target: \u05E7\u05D5\u05D3 \u05DE-PR \u05D6\u05E8 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E8\u05D5\u05E5 \u05E2\u05DD \u05D4\u05E1\u05D5\u05D3\u05D5\u05EA","runs on pull_request_target: code from an outside PR can run with the secrets"))),s.length&&r.push(v(t,`\u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05E1\u05D5\u05D3\u05D5\u05EA: ${s.join(", ")}`,`uses secrets: ${s.join(", ")}`)),/permissions:\s*write-all|contents:\s*write/.test(e)&&r.push(v(t,"\u05DE\u05E7\u05D1\u05DC \u05D4\u05E8\u05E9\u05D0\u05EA \u05DB\u05EA\u05D9\u05D1\u05D4 \u05DC\u05E8\u05D9\u05E4\u05D5","gets write access to the repository"));let i=[...e.matchAll(/uses:\s*([^\s@#]+)@([^\s#]+)/g)].filter(o=>!/^[0-9a-f]{40}$/.test(o[2])&&!o[1].startsWith("./"));return i.length&&r.push(v(t,`${i.length} \u05E8\u05DB\u05D9\u05D1\u05D9\u05DD \u05D7\u05D9\u05E6\u05D5\u05E0\u05D9\u05D9\u05DD \u05DC\u05D0 \u05E0\u05E2\u05D5\u05DC\u05D9\u05DD \u05DC\u05D2\u05E8\u05E1\u05D4 \u05DE\u05D3\u05D5\u05D9\u05E7\u05EA`,`${i.length} outside actions not pinned to an exact version`)),r.length||r.push(v(t,"\u05E9\u05D9\u05E0\u05D5\u05D9 \u05D1-CI \u05D1\u05DC\u05D9 \u05E1\u05D5\u05D3\u05D5\u05EA \u05D5\u05D1\u05DC\u05D9 \u05D4\u05E8\u05E9\u05D0\u05D5\u05EA \u05DB\u05EA\u05D9\u05D1\u05D4","a CI change with no secrets and no write access")),{risk:n,lines:r}}function Yr(e,t,r,n){let s=e.replace(/\\/g,"/"),i=typeof t.content=="string"?t.content:typeof t.new_string=="string"?t.new_string:Array.isArray(t.edits)?t.edits.map(c=>typeof c?.new_string=="string"?c.new_string:"").join(`
40
- `):null;if(i===null)return null;if(/\/migrations\/[^/]+\.sql$/i.test(s))return va(i,r,n);if(/\/\.github\/workflows\/[^/]+\.ya?ml$/i.test(s))return Sa(i,r);let o=i.split(`
35
+ `)}var Ki=new Set([".ods",".ots"]),Zi=64;function Yi(e){return G(e.replace(/<text:(?:tab|line-break)\b[^>]*\/>/g," ").replace(/<\/text:p>/g," ").replace(/<[^>]*>/g,"")).replace(/\s+/g," ").trim()}function Ji(e){let t=[],r=/<table:table\b([^>]*)>([\s\S]*?)<\/table:table>/g;for(let n of e.matchAll(r)){let s=G(/table:name="([^"]*)"/.exec(n[1]??"")?.[1]??"")||"Sheet",i=[],o=/<table:table-row\b[^>]*?(?:\/>|>([\s\S]*?)<\/table:table-row>)/g;for(let a of(n[2]??"").matchAll(o)){let c=[],l=/<table:(?:covered-)?table-cell\b([^>]*?)(?:\/>|>([\s\S]*?)<\/table:(?:covered-)?table-cell>)/g;for(let f of(a[1]??"").matchAll(l)){let d=Yi(f[2]??""),h=Number(/table:number-columns-repeated="(\d+)"/.exec(f[1]??"")?.[1]??"1")||1;for(let p=0;p<(d?Math.min(h,1024):Math.min(h,Zi));p++)c.push(d)}for(;c.length&&!c[c.length-1];)c.pop();c.length&&i.push(c.join(" "))}i.length&&t.push([s.replace(/\s+/g," "),...i].join(`
36
+ `))}return t.length?t.join(`
37
+
38
+ `):null}function qi(e,t,r){let n=new RegExp(`<${t}\\b[^>]*\\b${r}="([^"]*)"`,"g"),s=[],i;for(;(i=n.exec(e))!==null;)i[1]&&s.push(G(i[1]));return s}function Qi(e,t){let r=[];if(Je.has(e)){for(let n of t)(n==="content.xml"||n==="styles.xml"||n==="meta.xml")&&r.push(n);return r}e=Ui(e);for(let n of t)(n==="docProps/core.xml"||n==="docProps/app.xml")&&r.push(n);if(e===".xlsx"||e===".xlsm")for(let n of t)(n==="xl/sharedStrings.xml"||n==="xl/workbook.xml"||/^xl\/worksheets\/sheet\d+\.xml$/.test(n)||/^xl\/comments\d*\.xml$/.test(n))&&r.push(n);else if(e===".docx")for(let n of t)(n==="word/document.xml"||/^word\/(header|footer|footnotes|endnotes|comments)\d*\.xml$/.test(n))&&r.push(n);else if(e===".pptx")for(let n of t)/^ppt\/(slides|notesSlides)\/(slide|notesSlide)\d+\.xml$/.test(n)&&r.push(n);return r}function eo(e,t){let r=Y(e);if(!r||r.length===0)return null;let n=new Map(r.map(l=>[l.name,l])),s=Qi(t,r.map(l=>l.name));if(s.length===0)return null;let i=[],o=[],a=0,c=!1;for(let l of s){if(a>=q){c=!0;break}let f=n.get(l);if(!f)continue;let d=Gi(e,f);if(d===null)continue;let h=Ki.has(t)&&l==="content.xml"&&Ji(d)||Xi(d);if(l==="xl/workbook.xml"){let p=qi(d,"sheet","name");p.length&&(h+=`
39
+ `+p.join(`
40
+ `))}a+h.length>q&&(h=h.slice(0,Math.max(0,q-a)),c=!0),h.trim().length!==0&&(i.push(h),o.push(l),a+=h.length)}return i.length===0?null:{text:i.join(`
41
+ `),truncated:c,parts:o}}function dr(e,t,r={}){if(Ae(e)){let n=Ft(e,q);return"text"in n?{ok:!0,result:{text:n.text,truncated:n.truncated,parts:n.parts,attachments:n.attachments}}:{ok:!1,reason:n.reason}}if(Ye(e)){let n=jt(e.toString("latin1"));if(!n.trim())return{ok:!1,reason:"no text inside (an empty file, or only pictures)"};let s=n.length>q;return{ok:!0,result:{text:s?n.slice(0,q):n,truncated:s,parts:["rtf"]}}}if(t===".xlsb"){let n=or(e);if(!n)return{ok:!1,reason:"damaged, or an Excel binary workbook with no cells to read"};let s=n.length>q;return{ok:!0,result:{text:s?n.slice(0,q):n,truncated:s,parts:["xlsb"]}}}if(Ht.has(t)||Je.has(t)){let n=eo(e,t);return n?{ok:!0,result:n}:{ok:!1,reason:"damaged, or not really an Office file"}}if(Me.has(t)){let n=Ge(e,r);return n?{ok:!0,result:{text:n.text,truncated:n.truncated,parts:[`pdf:${n.engine}`],engine:n.engine,uncertain:n.uncertain}}:{ok:!1,reason:er(e)}}return Ut.has(t)?{ok:!1,reason:"not a Word, Excel, PowerPoint or Outlook file inside, despite its name"}:{ok:!1,reason:"unsupported format"}}function Bt(e,t,r={}){let n=dr(e,t,r);return n.ok?n.result:null}var zt=new Set([...Ht,...Je,...Ut,...lr,...Me,".xlsb"]);var dd=5*6e4,ud=2*6e4;import{deflateRawSync as oo}from"node:zlib";var ur={israeli_id:"[ID]",credit_card:"[CARD]",iban:"[IBAN]",israeli_phone:"[PHONE]",email:"[EMAIL]"},to=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,no=[...Rt].sort((e,t)=>+(t.subkind==="iban")-+(e.subkind==="iban"));function ie(e,t,r=1){e[t]=(e[t]??0)+r}var fr=null,oe=e=>{let t=e.trim();fr&&t&&fr.add(t)};function B(e,t={},r){let n=e;for(let i of Se()){let o=new RegExp(i.pattern.source,i.pattern.flags.includes("g")?i.pattern.flags:i.pattern.flags+"g");n=n.replace(o,a=>(ie(t,"secret"),oe(a),"[SECRET]"))}for(let i of no)i.pattern.lastIndex=0,n=n.replace(i.pattern,o=>i.validate(o)?(ie(t,i.subkind),oe(o),ur[i.subkind]??`[${i.subkind.toUpperCase()}]`):o);n=n.replace(to,i=>(ie(t,"email"),oe(i),ur.email));let s=r??new Set;for(let i of Oe()){let o=i.find(n).sort((a,c)=>c.start-a.start);for(let a of o){let c=n.slice(a.start,a.end);oe(c),i.kind==="name"&&s.add(c.trim()),n=n.slice(0,a.start)+`[${i.kind.toUpperCase()}]`+n.slice(a.end),ie(t,i.kind)}}return s.size&&(n=so(n,s,t)),{text:n,counts:t,columnsHidden:[]}}var ro=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function so(e,t,r){let n=new Set;for(let i of t){n.add(i);let o=i.split(/\s+/)[0]??"";o.length>=3&&o!==i&&n.add(o)}let s=e;for(let i of[...n].sort((o,a)=>a.length-o.length)){let o=new RegExp(`(?<![\\p{L}\\p{N}@.\\[-])${ro(i)}(?![\\p{L}\\p{N}@\\]-])`,"gu");s=s.replace(o,a=>(ie(r,"name"),oe(a),"[NAME]"))}return s}function he(e,t,r={}){let n=e;for(let[s,i]of[...t].sort((o,a)=>a[0].length-o[0].length))n.includes(s)&&(n=n.split(s).join(`[${i.toUpperCase()}]`),ie(r,i),oe(s));return n}function Wt(){let e=new Map,t={};return(r,n)=>{oe(n);let s=`${r}\0${n.trim()}`,i=e.get(s);return i===void 0&&(i=t[r]=(t[r]??0)+1,e.set(s,i)),`[${r.toUpperCase()}-${i}]`}}function qe(e){let t=e.trim();return/^\[[A-Z_]+(?:-\d+)?\]$/.test(t)||/^[\d]{0,4}[*•xX]{3,}[\d]{0,4}$/.test(t)}var hr=/^\s*-?\d+(?:\.\d+)?\s*$/;function Gt(e){let t=new Set;for(let[r,n]of e){let s=n.filter(o=>hr.test(o));if(s.length<3)continue;s.filter(o=>B(o).text!==o).length/s.length<.5&&t.add(r)}return t}function pr(e,t){return e.includes(t)||e.includes('"')||e.includes(`
42
+ `)?`"${e.replace(/"/g,'""')}"`:e}function io(e){let t=(e.match(/\t/g)??[]).length,r=(e.match(/;/g)??[]).length,n=(e.match(/,/g)??[]).length;return t>n&&t>=r?" ":r>n?";":","}function Vt(e,t){let r=e.split(/\r?\n/),n=t??io(r[0]??""),s=Fe(r[0]??"",n),i=s.map(p=>Ee(p)),o={},a=Wt(),c=r.slice(1).map(p=>p===""?null:Fe(p,n)),l=new Map;for(let p of c)p?.forEach((g,u)=>l.set(u,[...l.get(u)??[],g]));let f=Gt(l),d=ve();if(d){let p=c.filter(g=>g!==null).slice(0,200);for(let g of d({name:"table",headers:s,rows:p})){let u=s.indexOf(g.column);u>=0&&!(g.how==="header"&&f.has(u))&&(i[u]={type:g.type,label:g.category})}}let h=[s.map(p=>pr(p,n)).join(n)];for(let p of c){if(p===null){h.push("");continue}let g=p.map((u,y)=>{let m=i[y];return m&&u.trim()!==""&&!qe(u)?(ie(o,`column:${m.type}`),a(m.type,u)):f.has(y)&&hr.test(u)?u:B(u,o).text});h.push(g.map(u=>pr(u,n)).join(n))}return{text:h.join(`
43
+ `),counts:o,columnsHidden:s.filter((p,g)=>i[g])}}var ao=/^xl\/(pivotCache|charts|externalLinks)\//,yr=10;function mr(e,t,r=1){e[t]=(e[t]??0)+r}function br(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function _r(e){let t=e.replace(/<rPh\b[\s\S]*?<\/rPh>/g,""),r="";for(let n of t.matchAll(/<t(?:\s[^>]*)?>([\s\S]*?)<\/t>/g))r+=n[1];return G(r)}function co(e){return e?[...e.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>|<si\b[^>]*\/>/g)].map(t=>_r(t[1]??"")):[]}var xr=/<c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/c>)/g;function Qe(e,t){let r=new RegExp(`\\b${t}="([^"]*)"`).exec(e);return r?r[1]:null}function me(e,t){if(e.type==="s"){let n=/<v>([^<]*)<\/v>/.exec(e.inner);return n?t[Number(n[1])]??null:null}if(e.type==="inlineStr"){let n=/<is>([\s\S]*?)<\/is>/.exec(e.inner);return n?_r(n[1]):null}if(e.type==="b"||e.type==="e")return null;let r=/<v>([^<]*)<\/v>/.exec(e.inner);return r?G(r[1]):null}function lo(e){let t=[];for(let r of e.matchAll(xr)){let n=Qe(r[1],"r"),s=n?/^([A-Z]+)(\d+)$/.exec(n):null;if(!s)return null;t.push({full:r[0],attrs:r[1],inner:r[2]??"",col:s[1],row:Number(s[2]),type:Qe(r[1],"t")??"n"})}return t}function uo(e,t){let r=[...new Set(e.map(n=>n.row))].sort((n,s)=>n-s).slice(0,yr);for(let n of r){let s=new Map;for(let i of e.filter(o=>o.row===n)){let o=me(i,t),a=o?Ee(o):null;a&&s.set(i.col,{type:a.type,header:o.trim()})}if(s.size>0)return{row:n,cols:s}}return{row:-1,cols:new Map}}var fo=/^xl\/worksheets\/sheet\d+\.xml$/,po=200;function ho(e){let t=e.trim();return/^[\d.,\-+/:%$₪€\s]+$/.test(t)||t.length>60}function mo(e,t){let r=[...new Set(e.map(i=>i.row))].sort((i,o)=>i-o).slice(0,yr),n=-1,s=-1/0;for(let i of r){let o=e.filter(l=>l.row===i).map(l=>(me(l,t)??"").trim()).filter(Boolean);if(o.length<2)continue;let a=o.filter(l=>!ho(l)).length,c=a*2-(o.length-a);c>s&&(s=c,n=i)}return n}function go(e,t,r){let n=uo(t,r),s=ve();if(!s)return n;let i=n.row>=0?n.row:mo(t,r);if(i<0)return n;let o=t.filter(d=>d.row===i).map(d=>({col:d.col,text:(me(d,r)??"").trim()})).filter(d=>d.text),a=new Map(o.map((d,h)=>[d.col,h])),c=new Map;for(let d of t){if(d.row<=i)continue;let h=a.get(d.col);if(h!==void 0){if(!c.has(d.row)){if(c.size>=po)continue;c.set(d.row,o.map(()=>""))}c.get(d.row)[h]=me(d,r)??""}}let l=new Map(i===n.row?n.cols:[]),f=o.map(d=>d.text);for(let d of s({name:e,headers:f,rows:[...c.values()]})){let h=f.indexOf(d.column);h<0||l.set(o[h].col,{type:d.type,header:d.column,category:d.category,severity:d.severity,how:d.how})}return{row:i,cols:l}}function Xt(e,t){return`<c${e.replace(/\s*\bt="[^"]*"/,"")} t="inlineStr"><is><t xml:space="preserve">${br(t)}</t></is></c>`}var yo=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t+=1){let r=t;for(let n=0;n<8;n+=1)r=r&1?3988292384^r>>>1:r>>>1;e[t]=r>>>0}return e})();function bo(e){let t=4294967295;for(let r=0;r<e.length;r+=1)t=yo[(t^e[r])&255]^t>>>8;return(t^4294967295)>>>0}var gr=33;function Kt(e){let t=[],r=[],n=0;for(let o of e){let a=Buffer.from(o.name,"utf8"),c=o.name.endsWith("/"),l=c?Buffer.alloc(0):oo(o.data),f=c?0:8,d=c?0:bo(o.data),h=Buffer.alloc(30);h.writeUInt32LE(67324752,0),h.writeUInt16LE(20,4),h.writeUInt16LE(2048,6),h.writeUInt16LE(f,8),h.writeUInt16LE(gr,12),h.writeUInt32LE(d,14),h.writeUInt32LE(l.length,18),h.writeUInt32LE(o.data.length,22),h.writeUInt16LE(a.length,26),t.push(h,a,l);let p=Buffer.alloc(46);p.writeUInt32LE(33639248,0),p.writeUInt16LE(20,4),p.writeUInt16LE(20,6),p.writeUInt16LE(2048,8),p.writeUInt16LE(f,10),p.writeUInt16LE(gr,14),p.writeUInt32LE(d,16),p.writeUInt32LE(l.length,20),p.writeUInt32LE(o.data.length,24),p.writeUInt16LE(a.length,28),p.writeUInt32LE(n,42),r.push(p,a),n+=h.length+a.length+l.length}let s=Buffer.concat(r),i=Buffer.alloc(22);return i.writeUInt32LE(101010256,0),i.writeUInt16LE(e.length,8),i.writeUInt16LE(e.length,10),i.writeUInt32LE(s.length,12),i.writeUInt32LE(n,16),Buffer.concat([...t,s,i])}function Zt(e,t){let r=Y(e);if(!r||r.length===0||r.some(m=>ao.test(m.name)))return null;let n=new Map;for(let m of r){if(m.name.endsWith("/")){n.set(m.name,Buffer.alloc(0));continue}let x=J(e,m);if(!x)return null;n.set(m.name,x)}let s=[...n.keys()].filter(m=>fo.test(m));if(s.length===0)return null;let i=n.get("xl/sharedStrings.xml")?.toString("utf8")??null,o=co(i),a=new Set,c={},l=new Set,f=Wt(),d=Et();for(let m of s){let x=n.get(m).toString("utf8"),_=lo(x);if(!_)return null;let E=go(m.replace(/^xl\/worksheets\//,"").replace(/\.xml$/,""),_,o),b=E.row,F=new Map;for(let N of _){if(N.type!=="n"||N.row<=b)continue;let L=me(N,o);L!==null&&F.set(N.col,[...F.get(N.col)??[],L])}let H=Gt(F),P=new Map;for(let[N,{type:L,header:j,how:U}]of E.cols)U==="header"&&H.has(N)||(P.set(N,L),l.add(j));let X=x.replace(xr,(N,L,j)=>{let U=Qe(L,"r"),[,Z,w]=/^([A-Z]+)(\d+)$/.exec(U),k={full:N,attrs:L,inner:j??"",col:Z,row:Number(w),type:Qe(L,"t")??"n"},$=me(k,o),I=()=>{if(k.type==="s"){let Ln=/<v>([^<]*)<\/v>/.exec(k.inner);Ln&&a.add(Number(Ln[1]))}return N};if($===null||$.trim()==="")return I();if(d&&k.type==="n"&&H.has(Z)&&k.row>b)return mr(c,"amount"),Xt(L,"[AMOUNT]");let A=P.get(Z);if(A&&k.row>b&&!qe($))return mr(c,`column:${A}`),Xt(L,f(A,$));if(k.type==="n"&&H.has(Z))return I();let re=B($,c),ke=t?.size?he(re.text,t,c):re.text;return ke===$?I():Xt(L,ke)});n.set(m,Buffer.from(X,"utf8"))}if(i){let m=-1,x=i.replace(/<si\b[^>]*>[\s\S]*?<\/si>|<si\b[^>]*\/>/g,_=>(m+=1,a.has(m)?_:"<si><t>[HIDDEN]</t></si>"));n.set("xl/sharedStrings.xml",Buffer.from(x,"utf8"))}for(let m of[...n.keys()].filter(x=>/^xl\/comments\d*\.xml$/.test(x))){let _=n.get(m).toString("utf8").replace(/(<t(?:\s[^>]*)?>)([\s\S]*?)(<\/t>)/g,(E,b,F,H)=>{let P=B(G(F),c);return`${b}${br(t?.size?he(P.text,t,c):P.text)}${H}`});n.set(m,Buffer.from(_,"utf8"))}let h=n.get("docProps/core.xml");if(h){let m=h.toString("utf8").replace(/(<dc:creator>)[\s\S]*?(<\/dc:creator>)/,"$1$2").replace(/(<cp:lastModifiedBy>)[\s\S]*?(<\/cp:lastModifiedBy>)/,"$1$2");n.set("docProps/core.xml",Buffer.from(m,"utf8"))}let p=n.get("xl/workbook.xml");if(p){let m=p.toString("utf8").replace(/<(\w+:)?absPath\b[^>]*\/>|<(\w+:)?absPath\b[^>]*>[\s\S]*?<\/(\w+:)?absPath>/g,"");n.set("xl/workbook.xml",Buffer.from(m,"utf8"))}let g=n.get("docProps/app.xml");if(g){let m=g.toString("utf8").replace(/(<Company>)[\s\S]*?(<\/Company>)/,"$1$2").replace(/(<Manager>)[\s\S]*?(<\/Manager>)/,"$1$2");n.set("docProps/app.xml",Buffer.from(m,"utf8"))}let u=n.has("xl/calcChain.xml"),y=r.map(m=>m.name).filter(m=>!(u&&m==="xl/calcChain.xml"));if(u)for(let m of["[Content_Types].xml","xl/_rels/workbook.xml.rels"]){let x=n.get(m);x&&n.set(m,Buffer.from(x.toString("utf8").replace(/<(Override|Relationship)\b[^>]*calcChain[^>]*\/>/g,""),"utf8"))}return{bytes:Kt(y.map(m=>({name:m,data:n.get(m)}))),counts:c,columnsHidden:[...l]}}var ge=/(^|\/)(\.env(\.[\w.-]+)?|[\w.-]+\.env(\.[\w.-]+)?)$/i,_o=/(SECRET|PASSWORD|PASSWD|PASS|PWD|TOKEN|PRIVATE|CREDENTIAL|API_?KEY|_KEY|KEY_ID|DSN|DATABASE_URL|_URI|POOLER_URL|SALT|PEPPER)$/i,xo=/(^NEXT_PUBLIC_|^VITE_|^EXPO_PUBLIC_|ANON_KEY$|PUBLISHABLE_KEY$|PUBLIC_KEY$)/i;function Yt(e){let t=0;for(let r of e.split(/\r?\n/)){let n=/^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/.exec(r);if(!n||!_o.test(n[1])||xo.test(n[1]))continue;let s=n[2].trim().replace(/^(['"])(.*)\1$/,"$2");s.length>=8&&!/^\$\{?[A-Z_]+\}?$/.test(s)&&t++}return t}var ru=64*1024*1024,su=4*1024*1024;var iu=512*1024*1024,ou=1024*1024*1024;var au=256*1024*1024;var cu=new kr("utf-8",{fatal:!0}),lu=new kr("windows-1255");var du=new Set([".cache",".cargo",".rustup",".npm",".pnpm-store",".yarn",".gradle",".m2",".nuget",".conda",".pyenv",".rbenv",".nvm",".volta",".bun",".deno",".docker",".android",".vscode-server",".agents",".agent",".codeium",".continue","antigravity",".antigravity","__pycache__",".venv","venv","site-packages",".next",".turbo",".expo",".nx",".parcel-cache",".svelte-kit","appdata",".trash","$recycle.bin"].map(e=>e.toLowerCase()));var ku=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=","base64");var Po=["Put the new key where the app reads it (for a developer machine: the NoData vault + nodata_run, not a .env file).","Check that the app still works with the new key.","Only then delete / revoke the OLD key \u2014 until you do, whoever copied it can still use it."],R=(e,t,r)=>({provider:e,url:t,steps:[...r,...Po]}),Lo={"aws-access-key":R("AWS","https://console.aws.amazon.com/iam/home#/security_credentials",["Open IAM \u2192 your user \u2192 Security credentials.","Create a NEW access key (you see its secret once \u2014 keep it only in the vault)."]),"aws-secret-key":R("AWS","https://console.aws.amazon.com/iam/home#/security_credentials",["Open IAM \u2192 your user \u2192 Security credentials.","Create a NEW access key (you see its secret once \u2014 keep it only in the vault).","Mark the old key Inactive before deleting it."]),"gcp-api-key":R("Google Cloud","https://console.cloud.google.com/apis/credentials",["Open APIs & Services \u2192 Credentials.","Pick the key \u2192 Regenerate key (or create a new one and restrict it to the APIs you use)."]),"gcp-service-account":R("Google Cloud (service account)","https://console.cloud.google.com/iam-admin/serviceaccounts",["Open IAM & Admin \u2192 Service accounts \u2192 the account \u2192 Keys.","Add key \u2192 Create new key (JSON). Keep the file out of Git and out of shared folders."]),"firebase-key":R("Firebase / Google Cloud","https://console.cloud.google.com/apis/credentials",["A Firebase web key is meant to be public \u2014 restrict it instead: Credentials \u2192 the key \u2192 Application restrictions (your domains only).","If it is not a web key, regenerate it."]),"github-token":R("GitHub","https://github.com/settings/tokens",["Open Settings \u2192 Developer settings \u2192 Personal access tokens.","Generate a new token with only the scopes you need."]),"github-fine-grained":R("GitHub","https://github.com/settings/tokens?type=beta",["Open Fine-grained tokens.","Regenerate the token (or create a new one for only the repositories you need)."]),"gitlab-token":R("GitLab","https://gitlab.com/-/user_settings/personal_access_tokens",["Open Access tokens.","Create a new token with only the scopes you need."]),"stripe-secret":R("Stripe","https://dashboard.stripe.com/apikeys",["Open Developers \u2192 API keys.","Roll the secret key (Stripe can keep the old one alive for a short overlap)."]),"stripe-restricted":R("Stripe","https://dashboard.stripe.com/apikeys",["Open Developers \u2192 API keys \u2192 Restricted keys.","Roll the key, or create a new restricted key."]),"slack-token":R("Slack","https://api.slack.com/apps",["Open your app \u2192 OAuth & Permissions.","Rotate / reinstall to get a new token."]),"slack-webhook":R("Slack","https://api.slack.com/apps",["Open your app \u2192 Incoming Webhooks.","Add a new webhook URL for the channel."]),"twilio-api-key":R("Twilio","https://console.twilio.com/us1/account/keys-credentials/api-keys",["Open Account \u2192 API keys & tokens.","Create a new API key."]),"sendgrid-api-key":R("SendGrid","https://app.sendgrid.com/settings/api_keys",["Open Settings \u2192 API Keys.","Create a new key with only the permissions you need."]),"openai-key":R("OpenAI","https://platform.openai.com/api-keys",["Open API keys.","Create a new secret key."]),"openai-project-key":R("OpenAI","https://platform.openai.com/api-keys",["Open API keys (per project).","Create a new secret key for the same project."]),"anthropic-key":R("Anthropic","https://console.anthropic.com/settings/keys",["Open Settings \u2192 API keys.","Create a new key."]),"supabase-key":R("Supabase","https://supabase.com/dashboard/project/_/settings/api-keys",["Open the project \u2192 Project Settings \u2192 API Keys.","Create a new SECRET key (a service_role / secret key bypasses every database rule \u2014 treat it like a root password).","Older projects with JWT keys: rotating the JWT secret replaces every key and signs everyone out \u2014 plan it."]),"supabase-access-token":R("Supabase (personal access token \u2014 reaches every project of the account)","https://supabase.com/dashboard/account/tokens",["Open Account \u2192 Access Tokens.","Revoke this token, then generate a new one only where it is needed (CLI, MCP) \u2014 prefer a read-only MCP."]),"supabase-secret-key":R("Supabase","https://supabase.com/dashboard/project/_/settings/api-keys",["Open the project \u2192 Project Settings \u2192 API Keys.","Create a new secret key, switch your servers to it, then delete this one."]),"postgres-uri":R("PostgreSQL (the password in the connection string)","https://supabase.com/dashboard/project/_/settings/database",["Change the database user's password: in Supabase \u2192 Project Settings \u2192 Database \u2192 Reset password; elsewhere, your host's console or ALTER USER \u2026 WITH PASSWORD.","Update the connection string with the new password."]),"mongodb-uri":R("MongoDB","https://cloud.mongodb.com/",["Open Atlas \u2192 Database Access \u2192 the user \u2192 Edit \u2192 Edit password.","Update the connection string."]),"redis-uri":R("Redis","",["Reset the password in your Redis host's console (or CONFIG SET requirepass on your own server).","Update the connection string."]),"private-key":R("Private key (SSH / TLS / signing)","",["Generate a new key pair.","Register the new PUBLIC key where the old one was trusted (server authorized_keys, certificate, service settings)."]),"jwt-secret":R("Your app's JWT secret","",["Set a new long random secret in the app's configuration.","Every signed-in user will be signed out \u2014 plan the moment."]),"password-in-code":R("A password in code","",["Change the password in the system it belongs to."]),"bearer-token":R("An access token","",["Revoke the token in the service that issued it and issue a new one."])},No=R("A credential","",["Find the service it belongs to and issue a new credential there."]);function Jt(e){return Lo[e]??No}var Ou=768*1024*1024;var Do=8*1024*1024;function Ar(e){return/\.ndc$/i.test(e)||/\.clean\.[A-Za-z0-9]+$/.test(e)||Fo(e)}function Fo(e){return/(^|[\\/])\.nodata[\\/]/.test(e)}import{existsSync as Mo,mkdirSync as Gf,readFileSync as jo,statSync as qt,writeFileSync as Vf}from"node:fs";import{homedir as Ho}from"node:os";import{join as Uo}from"node:path";var Bo=()=>Uo(Ho(),".nodata","flagged.json");var $r="unread";function Rr(e){let t=e.replace(/\\/g,"/");return process.platform==="win32"?t.toLowerCase():t}var Ie=null;function Tr(){let e=Bo();try{if(!Mo(e))return{};let t=qt(e).mtimeMs;if(Ie&&Ie.path===e&&Ie.mtimeMs===t)return Ie.store;let r=JSON.parse(jo(e,"utf8"));return Ie={path:e,mtimeMs:t,store:r},r}catch{return{}}}function et(e){let t=Tr()[Rr(e)];if(!t)return null;try{if(qt(e).mtimeMs>t.mtimeMs+1e3)return null}catch{return null}let r=Object.fromEntries(Object.entries(t.kinds).filter(([n])=>n!==$r));return Object.keys(r).length?r:null}function tt(e){let t=Tr()[Rr(e)];if(!t||!t.kinds[$r])return null;try{return{changed:qt(e).mtimeMs>t.mtimeMs+1e3}}catch{return null}}import{existsSync as Ir,mkdirSync as Jf,readFileSync as Cr,writeFileSync as qf}from"node:fs";import{homedir as zo}from"node:os";import{join as Wo}from"node:path";var nt=()=>Wo(zo(),".nodata","prefs.json");function Go(){try{let e=Ir(nt())?JSON.parse(Cr(nt(),"utf8")).lang:null;return e==="he"||e==="en"?e:null}catch{return null}}function Vo(){let t=process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"";try{t||=Intl.DateTimeFormat().resolvedOptions().locale}catch{}return/^(he|iw)(?:[-_.@]|$)/i.test(t)?"he":"en"}function Q(){return Go()??Vo()}function Pr(){try{return Ir(nt())&&JSON.parse(Cr(nt(),"utf8")).amounts_sensitive===!0}catch{return!1}}function T(e,t,r=Q()){return r==="he"?e:t}import{createHmac as aa,randomBytes as ca}from"node:crypto";import{existsSync as nn,mkdirSync as la,readdirSync as da,readFileSync as rn,writeFileSync as ua}from"node:fs";import{homedir as dt}from"node:os";import{basename as fa,extname as pa,isAbsolute as ha,join as ut,relative as ma,resolve as ga}from"node:path";function ae(e){return typeof e=="number"&&Number.isFinite(e)?e:typeof e=="string"&&e.trim()!==""&&!Number.isNaN(Number(e))?Number(e):null}function Xo(e,t,r){return t===null||r===null?!1:t<=r?e>=t&&e<=r:e>=t||e<=r}function Lr(e,t,r){switch(t){case"eq":return e===r;case"ne":return e!==r;case"in":return Array.isArray(r)&&r.includes(e);case"not_in":return Array.isArray(r)&&!r.includes(e);case"prefix":return typeof e=="string"&&typeof r=="string"&&e.toLowerCase().startsWith(r.toLowerCase());case"gte":{let n=ae(e),s=ae(r);return n!==null&&s!==null&&n>=s}case"lte":{let n=ae(e),s=ae(r);return n!==null&&s!==null&&n<=s}case"between":{let n=ae(e);return n!==null&&Array.isArray(r)&&r.length===2&&Xo(n,ae(r[0]),ae(r[1]))}default:return!1}}function Nr(e,t,r){switch(t){case"in":return Array.isArray(r)&&e.some(n=>r.includes(n));case"not_in":return Array.isArray(r)&&!e.some(n=>r.includes(n));default:return!1}}import{existsSync as rt,mkdirSync as sp,readdirSync as Or,readFileSync as Ko,rmSync as ip,writeFileSync as op,chmodSync as ap}from"node:fs";import{homedir as Dr}from"node:os";import{basename as dp,isAbsolute as Zo,join as ce,relative as Yo,resolve as Jo}from"node:path";var ot=()=>ce(Dr(),".nodata"),qo=()=>ce(ot(),"credentials.json"),st=()=>ce(ot(),"orgs"),Qo=()=>ce(ot(),"bindings.json"),ea=/^[A-Za-z0-9_.-]{1,80}$/,Qt=e=>ea.test(e)&&e!=="."&&e!=="..";function Fr(e){try{return rt(e)?JSON.parse(Ko(e,"utf8")):null}catch{return null}}function ta(e){return e?e.device?.org_id?e.device.org_id:e.api_key?`key-${(e.key_prefix??e.api_key.slice(0,12)).replace(/[^A-Za-z0-9_-]/g,"")}`:null:null}function Mr(){return ta(Fr(qo()))}function en(){let e=[],t=Mr();t&&e.push(t);try{for(let r of Or(st()))Qt(r)&&!e.includes(r)&&rt(ce(st(),r,"credentials.json"))&&e.push(r)}catch{}return e}var na=e=>process.platform==="win32"||process.platform==="darwin"?e.toLowerCase():e,it=e=>na(Jo(e.replace(/^~(?=[\\/]|$)/,Dr())));function ra(e,t){let r=Yo(it(e),it(t));return r===""||!r.startsWith("..")&&!Zo(r)}function ee(){let e=Fr(Qo());return(Array.isArray(e?.bindings)?e.bindings:[]).filter(r=>!!r&&typeof r.folder=="string"&&typeof r.org_id=="string"&&Qt(r.org_id)).map(r=>r.project===void 0||oa(r.project)===r.project?r:{...r,project:void 0}).map(r=>r.client===void 0||typeof r.client?.org_id=="string"&&sa.test(r.client.org_id)?r:{...r,client:void 0})}var sa=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function jr(e,t=ee()){let r=null;for(let n of t)ra(n.folder,e)&&(!r||it(n.folder).length>it(r.folder).length)&&(r=n);return r}function ia(e,t=en(),r=ee()){if(t.length===0)return{kind:"none"};let n=jr(e,r.filter(s=>t.includes(s.org_id)));return n?{kind:"bound",org_id:n.org_id,folder:n.folder}:t.length===1?{kind:"only",org_id:t[0]}:{kind:"unbound",orgs:t}}function Hr(e){let t=ia(e);return t.kind==="bound"||t.kind==="only"?t.org_id:null}function oa(e){if(typeof e!="string")return null;let t=e.trim();return t&&t.length<=120&&!/[\u0000-\u001f\\/]/.test(t)?t:null}function Ur(){let e=[],t=ce(ot(),"org-mandate.json");rt(t)&&e.push({owner:Mr(),file:t});try{for(let r of Or(st())){let n=ce(st(),r,"org-mandate.json");Qt(r)&&rt(n)&&e.push({owner:r,file:n})}}catch{}return e}function at(e,t,r=ee()){if(!e)return!0;let n=jr(t,r);return!n||n.org_id===e}var Br=()=>ut(dt(),".nodata","rules.json"),ct=()=>ut(dt(),".nodata","rules-key"),le={allow:0,ask:1,clean_copy:2,deny:3},ya=["claude-code","cursor","windsurf","codex","gemini","vscode","claude-desktop"],tn=e=>typeof e=="string"&&e.trim()?e.trim().toLowerCase():void 0,ba={action:{cardinality:"scalar",ops:["eq","ne","in","not_in"],enumValues:["read","search","run","write","browse","interact"],label:"what the agent does (read, search, run, write; on a site: browse, interact)",extract:e=>e.action},"time.hour":{cardinality:"scalar",ops:["between","gte","lte","eq"],label:"hour on this computer (0-23; 18..6 wraps overnight)",extract:e=>e.now.getHours()},"time.weekday":{cardinality:"scalar",ops:["in","not_in","between","eq"],label:"weekday on this computer (0 Sunday \u2026 6 Saturday)",extract:e=>e.now.getDay()},"file.ext":{cardinality:"scalar",ops:["eq","ne","in","not_in"],label:"file type (.xlsx, .pdf, .env \u2026)",extract:e=>pa(e.path).toLowerCase()||void 0},"file.name":{cardinality:"scalar",ops:["eq","in","prefix"],label:"file name",extract:e=>fa(e.path).toLowerCase()},agent:{cardinality:"scalar",ops:["eq","ne","in","not_in"],agentScope:!0,label:`which agent (${ya.join(", ")} \u2026)`,extract:e=>tn(e.who?.host)},"agent.type":{cardinality:"scalar",ops:["eq","ne","in","not_in"],agentScope:!0,label:"sub-agent type inside the agent (main = the main conversation; general-purpose, explore \u2026)",extract:e=>tn(e.who?.type)},org:{cardinality:"scalar",ops:["eq","ne","in","not_in"],agentScope:!0,label:"which organisation the agent works for (the one its folder is bound to)",extract:e=>tn(e.who?.org)}};function _a(){try{if(nn(ct())){let t=rn(ct(),"utf8").trim();if(/^[0-9a-f]{64}$/.test(t))return Buffer.from(t,"hex")}}catch{}let e=ca(32);return la(ut(dt(),".nodata"),{recursive:!0}),ua(ct(),e.toString("hex")+`
44
+ `,{mode:384}),e}var xa=(e,t)=>aa("sha256",t).update(JSON.stringify(e)).digest("hex");function sn(){if(!nn(Br()))return{rules:[],tampered:!1};try{let e=JSON.parse(rn(Br(),"utf8")),t=Array.isArray(e.rules)?e.rules:[],r=nn(ct())&&typeof e.mac=="string"&&e.mac===xa(t,_a());return{rules:t,tampered:!r}}catch{return{rules:[],tampered:!0}}}var Ce=e=>{let t=ga(e.replace(/^~(?=[\\/]|$)/,dt())).replace(/\\/g,"/");return process.platform==="win32"?t.toLowerCase():t};function de(e,t){if(zr(e)||zr(t))return!1;if(e.startsWith("**/")){let n=e.slice(3).replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase(),s=Ce(t).toLowerCase();return s.endsWith("/"+n)||s.includes("/"+n+"/")}let r=ma(Ce(e),Ce(t));return r===""||!r.startsWith("..")&&!ha(r)}var wa="site:",zr=e=>e.startsWith(wa);function on(e){try{let t=new URL(e.trim());return(t.protocol==="http:"||t.protocol==="https:")&&t.hostname.toLowerCase().replace(/\.$/,"")||null}catch{return null}}function an(e,t){return e==="*"?!0:t===e||t.endsWith("."+e)}function lt(e,t,r){let n=ba[e.field];if(!n)return!1;let s=n.extract(t);return n.agentScope&&s===void 0?r!=="allow":e.op==="exists"?s!==void 0&&s!=="":s===void 0?!1:n.cardinality==="set"?Nr(Array.isArray(s)?s:[],e.op,e.value):Lr(s,e.op,e.value)}function ft(e,t){let r=e.map((n,s)=>({rule:n,n:s+1})).filter(n=>de(n.rule.path,t.path)).sort((n,s)=>Ce(s.rule.path).length-Ce(n.rule.path).length||n.n-s.n);for(let n of r)if((n.rule.when??[]).every(s=>lt(s,t,n.rule.effect)))return{...n,touched:t.path};return null}function pt(e,t,r,n,s){let i=null;for(let[o,a]of e.entries())de(a.path,t)||(a.path.startsWith("**/")?!ka(t,a.path):!de(t,a.path))||(a.when??[]).every(c=>lt(c,{action:r,path:a.path,now:n,who:s},a.effect))&&(!i||le[a.effect]>le[i.rule.effect])&&(i={rule:a,n:o+1,touched:a.path});return i}function cn(e,t){let r=i=>i==="*"?0:i.length,n=t.site,s=e.map((i,o)=>({rule:i,n:o+1})).filter(i=>i.rule.site&&(n===void 0||an(i.rule.site,n))).sort((i,o)=>r(o.rule.site)-r(i.rule.site)||i.n-o.n);if(n===void 0){let i=null;for(let o of s)o.rule.effect==="allow"||!(o.rule.when??[]).every(a=>lt(a,t,o.rule.effect))||(!i||le[o.rule.effect]>le[i.rule.effect])&&(i=o);return i?{...i,touched:""}:null}for(let i of s)if((i.rule.when??[]).every(o=>lt(o,t,i.rule.effect)))return{...i,touched:n};return null}function ka(e,t){let r=0,n=(s,i)=>{if(i>5||r>4e3)return!1;let o;try{o=da(s,{withFileTypes:!0})}catch{return!1}for(let a of o){if(++r>4e3||!a.isDirectory()||a.name==="node_modules"||a.name===".git")continue;let c=ut(s,a.name);if(de(t,c)||n(c,i+1))return!0}return!1};return n(e,0)}var va={allow:["allowed","\u05DE\u05D5\u05EA\u05E8"],ask:["ask the person","\u05DC\u05E9\u05D0\u05D5\u05DC \u05D0\u05D5\u05EA\u05DA"],clean_copy:["clean copy only","\u05E8\u05E7 \u05E2\u05D5\u05EA\u05E7 \u05E0\u05E7\u05D9"],deny:["not allowed","\u05D0\u05E1\u05D5\u05E8"]};function Wr(e,t=!1){return e.site?e.site==="*"?t?"\u05DB\u05DC \u05D0\u05EA\u05E8":"every site":`${t?"\u05D0\u05EA\u05E8":"site"} ${e.site}`:e.path}var Gr=(e,t=!1)=>va[e][t?1:0];function ln(){let e=[];for(let{owner:t,file:r}of Ur())try{let n=JSON.parse(rn(r,"utf8"));Array.isArray(n?.folder_rules)&&n.folder_rules.length&&e.push({owner:t,rules:n.folder_rules})}catch{}return e}function Vr(){let e=en();return e.length<2?[]:ee().filter(t=>e.includes(t.org_id)).map(t=>({path:t.folder,effect:"deny",when:[{field:"org",op:"ne",value:t.org_id.toLowerCase()}],note:`works for organisation ${t.org_id}; another organisation's agent does not touch it`}))}import{closeSync as Sa,mkdirSync as Ea,openSync as Aa,readdirSync as $a,readFileSync as Ra,rmSync as Ta,statSync as Ia,writeSync as Ca}from"node:fs";import{createHash as Pa}from"node:crypto";import{homedir as La}from"node:os";import{join as dn}from"node:path";var Na=()=>dn(La(),".nodata","gate-calls"),Oa=5e3,Da=600*1e3;function Fa(e){try{let t=Date.now();for(let r of $a(e)){let n=dn(e,r);t-Ia(n).mtimeMs>Da&&Ta(n,{force:!0})}}catch{}}async function un(e,t,r){if(!e)return{value:r(),first:!0};let n=Na(),s=dn(n,Pa("sha256").update(`${t}\0${e}`).digest("hex").slice(0,32)+".json"),i;try{Ea(n,{recursive:!0,mode:448}),i=Aa(s,"wx",384)}catch{let a=Date.now()+Oa;for(;Date.now()<a;){try{let c=Ra(s,"utf8");if(c)return{value:JSON.parse(c),first:!1}}catch{}await new Promise(c=>setTimeout(c,40))}return{value:r(),first:!0}}let o=r();try{Ca(i,JSON.stringify(o??null))}finally{Sa(i)}return Math.random()<.05&&Fa(n),{value:o,first:!0}}import{createHash as Ma}from"node:crypto";import{existsSync as ja,mkdirSync as Ha,readFileSync as Kr,writeFileSync as Ua}from"node:fs";import{homedir as pn}from"node:os";import{join as hn}from"node:path";var Zr=()=>hn(pn(),".nodata","checkpoints.json"),Xr=()=>hn(pn(),".nodata","connection.json"),Ba=900*1e3,za=300*1e3,Wa=100;function fn(e){return Array.isArray(e)?e.map(fn):e&&typeof e=="object"?Object.fromEntries(Object.keys(e).sort().map(t=>[t,fn(e[t])])):e}function mn(e,t,r,n){return Ma("sha256").update(JSON.stringify([e,t,r,fn(n)])).digest("hex").slice(0,12)}var Ga=/^(element|selector|ref|uid|target|name|label|button|key|role|title|description|link|url|href|uri|startUrl|start_url|page_url)$/i;function gn(e){let t=[];for(let[r,n]of Object.entries(e)){if(!Ga.test(r)||typeof n!="string"&&typeof n!="number")continue;let s=String(n);if(/^https?:\/\//i.test(s))try{let i=new URL(s);s=`${i.origin}${i.pathname}`}catch{continue}if(t.push(`${r}: ${s.replace(/[\r\n]+/g," ").slice(0,120)}`),t.length>=4)break}return t.join(" \xB7 ").slice(0,300)}function Yr(){try{let e=JSON.parse(Kr(Zr(),"utf8")),t=Date.now(),r={};for(let[n,s]of Object.entries(e??{})){if(!s||typeof s.at!="number")continue;(s.passed_at?t-s.passed_at<za:t-s.at<Ba)&&(r[n]=s)}return r}catch{return{}}}function Jr(e){let t=Object.entries(e).sort((r,n)=>n[1].at-r[1].at).slice(0,Wa);Ha(hn(pn(),".nodata"),{recursive:!0}),Ua(Zr(),JSON.stringify(Object.fromEntries(t))+`
45
+ `,{mode:384})}function yn(e){try{let t=Yr(),r=t[e.id];t[e.id]={...r,...e,at:r&&!r.passed_at?r.at:Date.now()},Jr(t)}catch{}}function bn(e){try{let t=Yr();return t[e]?.passed_at?(delete t[e],Jr(t),!0):!1}catch{return!1}}function _n(){try{if(!ja(Xr()))return!1;let e=JSON.parse(Kr(Xr(),"utf8")).state;return e==="connected"||e==="reconnecting"||e==="restart"}catch{return!1}}var S=(e,t,r)=>e==="he"?t:r,qr={safe:0,review:1,destructive:2},Qr=(e,t)=>qr[t]>qr[e]?t:e;function Va(e){let t=e.replace(/\/\*[\s\S]*?\*\//g," ");return t=t.replace(/--[^\n]*/g," "),t=t.replace(/\$([A-Za-z_]*)\$[\s\S]*?\$\1\$/g," $$body$$ "),t.split(";").map(r=>r.replace(/\s+/g," ").trim()).filter(Boolean)}var V='("?[\\w.]+"?)',v=e=>e.replace(/"/g,"").replace(/^public\./i,"");function Xa(e,t,r=!1){let n=[],s=[],i=[],o=[],a=new Set,c=new Set,l=new Set,f=new Map;for(let p of Va(e)){let g=p.toUpperCase(),u;if(u=p.match(new RegExp(`^CREATE (?:UNLOGGED )?TABLE (?:IF NOT EXISTS )?${V}`,"i"))){a.add(v(u[1]).toLowerCase()),i.push(S(t,`\u05D8\u05D1\u05DC\u05D4 \u05D7\u05D3\u05E9\u05D4 ${v(u[1])}`,`new table ${v(u[1])}`));continue}if(u=p.match(new RegExp(`^DROP TABLE (?:IF EXISTS )?${V}`,"i"))){n.push(S(t,`\u05DE\u05D5\u05D7\u05E7 \u05D0\u05EA \u05D4\u05D8\u05D1\u05DC\u05D4 ${v(u[1])} \u05D5\u05DB\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA \u05E9\u05D1\u05D4`,`deletes table ${v(u[1])} and every row in it`));continue}if(/^TRUNCATE/i.test(p)){n.push(S(t,"\u05DE\u05E8\u05D5\u05E7\u05DF \u05D8\u05D1\u05DC\u05D4 (TRUNCATE): \u05DB\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA \u05E0\u05DE\u05D7\u05E7\u05D5\u05EA","empties a table (TRUNCATE): every row is deleted"));continue}if(u=p.match(new RegExp(`^ALTER TABLE (?:IF EXISTS )?(?:ONLY )?${V} (.*)$`,"i"))){let y=v(u[1]),m=u[2];for(let _ of m.matchAll(/DROP COLUMN (?:IF EXISTS )?("?[\w]+"?)/gi))n.push(S(t,`\u05DE\u05D5\u05D7\u05E7 \u05D0\u05EA \u05D4\u05E2\u05DE\u05D5\u05D3\u05D4 ${y}.${v(_[1])} \u05D5\u05D4\u05DE\u05D9\u05D3\u05E2 \u05E9\u05D1\u05D4`,`deletes column ${y}.${v(_[1])} and its data`));for(let _ of m.matchAll(/ADD COLUMN (?:IF NOT EXISTS )?("?[\w]+"?)\s+([^,]*)/gi)){let E=/NOT NULL/i.test(_[2])&&!/DEFAULT/i.test(_[2])&&!a.has(y.toLowerCase());(E?s:i).push(E?S(t,`\u05E2\u05DE\u05D5\u05D3\u05D4 \u05D7\u05D3\u05E9\u05D4 ${y}.${v(_[1])} \u05D7\u05D5\u05D1\u05D4 \u05D5\u05D1\u05DC\u05D9 \u05D1\u05E8\u05D9\u05E8\u05EA \u05DE\u05D7\u05D3\u05DC: \u05D9\u05D9\u05DB\u05E9\u05DC \u05D0\u05DD \u05D9\u05E9 \u05DB\u05D1\u05E8 \u05E9\u05D5\u05E8\u05D5\u05EA`,`new required column ${y}.${v(_[1])} with no default: fails if rows exist`):S(t,`\u05E2\u05DE\u05D5\u05D3\u05D4 \u05D7\u05D3\u05E9\u05D4 ${y}.${v(_[1])}`,`new column ${y}.${v(_[1])}`))}for(let _ of m.matchAll(/ALTER COLUMN ("?[\w]+"?) (?:SET DATA )?TYPE/gi))s.push(S(t,`\u05DE\u05E9\u05E0\u05D4 \u05D0\u05EA \u05D4\u05E1\u05D5\u05D2 \u05E9\u05DC ${y}.${v(_[1])}: \u05DE\u05D9\u05D3\u05E2 \u05E7\u05D9\u05D9\u05DD \u05DE\u05D5\u05DE\u05E8`,`changes the type of ${y}.${v(_[1])}: existing data is converted`));for(let _ of m.matchAll(/RENAME (?:COLUMN )?("?[\w]+"?) TO ("?[\w]+"?)/gi))s.push(S(t,`\u05DE\u05E9\u05E0\u05D4 \u05E9\u05DD ${y}.${v(_[1])} \u05DC-${v(_[2])}: \u05E7\u05D5\u05D3 \u05E9\u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05E9\u05DD \u05D4\u05D9\u05E9\u05DF \u05D9\u05D9\u05E9\u05D1\u05E8`,`renames ${y}.${v(_[1])} to ${v(_[2])}: code using the old name breaks`));/DISABLE ROW LEVEL SECURITY/i.test(m)&&n.push(S(t,`\u05DE\u05DB\u05D1\u05D4 \u05D0\u05EA \u05D4\u05D4\u05D2\u05E0\u05D4 \u05E2\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA (RLS) \u05D1\u05D8\u05D1\u05DC\u05D4 ${y}: \u05DB\u05DC \u05DE\u05D9 \u05E9\u05DE\u05D7\u05D5\u05D1\u05E8 \u05E8\u05D5\u05D0\u05D4 \u05D4\u05DB\u05DC`,`turns off row security (RLS) on ${y}: anyone connected sees everything`)),/ENABLE ROW LEVEL SECURITY/i.test(m)&&i.push(S(t,`\u05DE\u05D3\u05DC\u05D9\u05E7 \u05D4\u05D2\u05E0\u05D4 \u05E2\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA (RLS) \u05D1\u05D8\u05D1\u05DC\u05D4 ${y}`,`turns on row security (RLS) on ${y}`));let x=y.toLowerCase();/DROP CONSTRAINT/i.test(m)&&f.set(x,{table:y,drop:!0,add:f.get(x)?.add??!1}),/ADD CONSTRAINT/i.test(m)&&f.set(x,{table:y,drop:f.get(x)?.drop??!1,add:!0});continue}if(u=p.match(new RegExp(`^DELETE FROM (?:ONLY )?${V}(.*)$`,"i"))){let y=/\bWHERE\b/i.test(u[2]);(y?s:n).push(y?S(t,`\u05DE\u05D5\u05D7\u05E7 \u05E9\u05D5\u05E8\u05D5\u05EA \u05DE\u05D4\u05D8\u05D1\u05DC\u05D4 ${v(u[1])} (\u05DC\u05E4\u05D9 \u05EA\u05E0\u05D0\u05D9)`,`deletes rows from ${v(u[1])} (by a condition)`):S(t,`\u05DE\u05D5\u05D7\u05E7 \u05D0\u05EA \u05DB\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA \u05D1\u05D8\u05D1\u05DC\u05D4 ${v(u[1])}`,`deletes every row in ${v(u[1])}`));continue}if(u=p.match(new RegExp(`^UPDATE (?:ONLY )?${V}(.*)$`,"i"))){let y=/\bWHERE\b/i.test(u[2]);(y?s:n).push(y?S(t,`\u05DE\u05E9\u05E0\u05D4 \u05E9\u05D5\u05E8\u05D5\u05EA \u05E7\u05D9\u05D9\u05DE\u05D5\u05EA \u05D1\u05D8\u05D1\u05DC\u05D4 ${v(u[1])} (\u05DC\u05E4\u05D9 \u05EA\u05E0\u05D0\u05D9)`,`changes existing rows in ${v(u[1])} (by a condition)`):S(t,`\u05DE\u05E9\u05E0\u05D4 \u05D0\u05EA \u05DB\u05DC \u05D4\u05E9\u05D5\u05E8\u05D5\u05EA \u05D1\u05D8\u05D1\u05DC\u05D4 ${v(u[1])}`,`changes every row in ${v(u[1])}`));continue}if(u=p.match(new RegExp(`^INSERT INTO ${V}`,"i"))){o.push(S(t,`\u05DE\u05D5\u05E1\u05D9\u05E3 \u05E9\u05D5\u05E8\u05D5\u05EA \u05DC\u05D8\u05D1\u05DC\u05D4 ${v(u[1])}`,`adds rows to ${v(u[1])}`));continue}if(u=p.match(new RegExp(`^DROP POLICY (?:IF EXISTS )?("[^"]+"|\\S+) ON ${V}`,"i"))){c.add(v(u[2]).toLowerCase());continue}if(u=p.match(new RegExp(`^CREATE POLICY ("[^"]+"|\\S+) ON ${V}`,"i"))){l.add(v(u[2]).toLowerCase()),/\bTO (anon|public)\b/i.test(p)&&/USING \(\s*true\s*\)/i.test(p)&&s.push(S(t,`\u05DB\u05DC\u05DC \u05D2\u05D9\u05E9\u05D4 \u05D1-${v(u[2])} \u05E9\u05E4\u05D5\u05EA\u05D7 \u05D4\u05DB\u05DC \u05DC\u05D0\u05D5\u05E8\u05D7\u05D9\u05DD (anon)`,`an access rule on ${v(u[2])} that opens everything to guests (anon)`));continue}if((u=p.match(/^GRANT (.+) ON (?:TABLE |ALL TABLES IN SCHEMA )?(\S+) TO (.+)$/i))&&/\b(anon|public|authenticated)\b/i.test(u[3])){s.push(S(t,`\u05E0\u05D5\u05EA\u05DF \u05D4\u05E8\u05E9\u05D0\u05D4 (${u[1].trim()}) \u05E2\u05DC ${v(u[2])} \u05DC-${u[3].trim()}`,`grants ${u[1].trim()} on ${v(u[2])} to ${u[3].trim()}`));continue}if(u=p.match(new RegExp(`^DROP (FUNCTION|VIEW|TYPE|TRIGGER|INDEX)(?: IF EXISTS)? ${V}`,"i"))){s.push(S(t,`\u05DE\u05D5\u05D7\u05E7 ${u[1].toLowerCase()} ${v(u[2])}: \u05E7\u05D5\u05D3 \u05E9\u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05D5 \u05D9\u05D9\u05E9\u05D1\u05E8`,`drops ${u[1].toLowerCase()} ${v(u[2])}: code using it breaks`));continue}if(u=p.match(new RegExp(`^CREATE (?:UNIQUE )?INDEX (?:CONCURRENTLY )?(?:IF NOT EXISTS )?\\S+ ON (?:ONLY )?${V}`,"i"))){i.push(S(t,`\u05D0\u05D9\u05E0\u05D3\u05E7\u05E1 \u05E2\u05DC ${v(u[1])}`,`index on ${v(u[1])}`));continue}if(/^CREATE (OR REPLACE )?(FUNCTION|PROCEDURE)/i.test(p)){let y=p.match(/(?:FUNCTION|PROCEDURE) ("?[\w.]+"?)/i)?.[1];(/SECURITY DEFINER/i.test(g)?s:i).push(/SECURITY DEFINER/i.test(g)?S(t,`\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4 ${v(y??"")} \u05E9\u05E8\u05E6\u05D4 \u05D1\u05D4\u05E8\u05E9\u05D0\u05D5\u05EA \u05E9\u05DC \u05D4\u05D1\u05E2\u05DC\u05D9\u05DD (SECURITY DEFINER)`,`function ${v(y??"")} that runs with its owner's rights (SECURITY DEFINER)`):S(t,`\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4 ${v(y??"")}`,`function ${v(y??"")}`));continue}/^CREATE (OR REPLACE )?(VIEW|TRIGGER|TYPE|SCHEMA|EXTENSION)/i.test(p)&&i.push(S(t,p.split(" ").slice(0,4).join(" ").toLowerCase(),p.split(" ").slice(0,4).join(" ").toLowerCase()))}for(let p of c)l.has(p)||s.push(S(t,`\u05DE\u05D5\u05D7\u05E7 \u05DB\u05DC\u05DC \u05D2\u05D9\u05E9\u05D4 \u05D1\u05D8\u05D1\u05DC\u05D4 ${p} \u05D1\u05DC\u05D9 \u05DC\u05D9\u05E6\u05D5\u05E8 \u05D7\u05D3\u05E9`,`drops an access rule on ${p} without creating a new one`));c.size&&[...c].every(p=>l.has(p))&&i.push(S(t,`\u05DE\u05D7\u05DC\u05D9\u05E3 \u05DB\u05DC\u05DC\u05D9 \u05D2\u05D9\u05E9\u05D4 (${[...c].join(", ")})`,`replaces access rules (${[...c].join(", ")})`));for(let{table:p,drop:g,add:u}of f.values())s.push(g&&u?S(t,`\u05DE\u05D7\u05DC\u05D9\u05E3 \u05D0\u05D9\u05DC\u05D5\u05E5 \u05D1\u05D8\u05D1\u05DC\u05D4 ${p}: \u05D9\u05D9\u05DB\u05E9\u05DC \u05D0\u05DD \u05DE\u05D9\u05D3\u05E2 \u05E7\u05D9\u05D9\u05DD \u05DC\u05D0 \u05E2\u05D5\u05DE\u05D3 \u05D1\u05D7\u05D3\u05E9`,`replaces a constraint on ${p}: fails if existing data does not meet the new one`):g?S(t,`\u05DE\u05E1\u05D9\u05E8 \u05D0\u05D9\u05DC\u05D5\u05E5 \u05DE\u05D4\u05D8\u05D1\u05DC\u05D4 ${p}: \u05DE\u05D9\u05D3\u05E2 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D9\u05D5\u05DB\u05DC \u05DC\u05D4\u05D9\u05DB\u05E0\u05E1`,`removes a constraint from ${p}: invalid data can get in`):S(t,`\u05DE\u05D5\u05E1\u05D9\u05E3 \u05D0\u05D9\u05DC\u05D5\u05E5 \u05DC\u05D8\u05D1\u05DC\u05D4 ${p}: \u05D9\u05D9\u05DB\u05E9\u05DC \u05D0\u05DD \u05DE\u05D9\u05D3\u05E2 \u05E7\u05D9\u05D9\u05DD \u05DC\u05D0 \u05E2\u05D5\u05DE\u05D3 \u05D1\u05D5`,`adds a constraint to ${p}: fails if existing data does not meet it`));r&&s.unshift(S(t,"\u05DE\u05E9\u05E0\u05D4 \u05E7\u05D5\u05D1\u05E5 \u05DE\u05D9\u05D2\u05E8\u05E6\u05D9\u05D4 \u05E7\u05D9\u05D9\u05DD: \u05D0\u05DD \u05D4\u05D5\u05D0 \u05DB\u05D1\u05E8 \u05D4\u05D5\u05E8\u05E5 \u05D1\u05E4\u05E8\u05D5\u05D3\u05E7\u05E9\u05DF, \u05D4\u05E9\u05D9\u05E0\u05D5\u05D9 \u05DC\u05D0 \u05D9\u05E8\u05D5\u05E5 \u05E9\u05D5\u05D1","edits an existing migration file: if it already ran in production, the change will not run again")),/--\s*Rollback/i.test(e)||s.push(S(t,"\u05D0\u05D9\u05DF \u05D4\u05E2\u05E8\u05EA Rollback (\u05D0\u05D9\u05DA \u05D7\u05D5\u05D6\u05E8\u05D9\u05DD \u05D0\u05D7\u05D5\u05E8\u05D4)","no Rollback note (how to undo it)"));let d="safe";s.length&&(d=Qr(d,"review")),n.length&&(d=Qr(d,"destructive"));let h=[...new Set([...n,...s,...o,...i])];return{risk:d,lines:h.length?h:[S(t,"\u05DC\u05D0 \u05D6\u05D5\u05D4\u05D5 \u05E4\u05E7\u05D5\u05D3\u05D5\u05EA \u05DE\u05D5\u05DB\u05E8\u05D5\u05EA \u05D1\u05E7\u05D5\u05D1\u05E5","no known statements found in the file")]}}function Ka(e,t){let r=[],n="review",s=[...new Set([...e.matchAll(/secrets\.([A-Z0-9_]+)/g)].map(o=>o[1]).filter(o=>o!=="GITHUB_TOKEN"))];/\bpull_request_target\b/.test(e)&&(n="destructive",r.push(S(t,"\u05E8\u05E5 \u05E2\u05DC pull_request_target: \u05E7\u05D5\u05D3 \u05DE-PR \u05D6\u05E8 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E8\u05D5\u05E5 \u05E2\u05DD \u05D4\u05E1\u05D5\u05D3\u05D5\u05EA","runs on pull_request_target: code from an outside PR can run with the secrets"))),s.length&&r.push(S(t,`\u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05E1\u05D5\u05D3\u05D5\u05EA: ${s.join(", ")}`,`uses secrets: ${s.join(", ")}`)),/permissions:\s*write-all|contents:\s*write/.test(e)&&r.push(S(t,"\u05DE\u05E7\u05D1\u05DC \u05D4\u05E8\u05E9\u05D0\u05EA \u05DB\u05EA\u05D9\u05D1\u05D4 \u05DC\u05E8\u05D9\u05E4\u05D5","gets write access to the repository"));let i=[...e.matchAll(/uses:\s*([^\s@#]+)@([^\s#]+)/g)].filter(o=>!/^[0-9a-f]{40}$/.test(o[2])&&!o[1].startsWith("./"));return i.length&&r.push(S(t,`${i.length} \u05E8\u05DB\u05D9\u05D1\u05D9\u05DD \u05D7\u05D9\u05E6\u05D5\u05E0\u05D9\u05D9\u05DD \u05DC\u05D0 \u05E0\u05E2\u05D5\u05DC\u05D9\u05DD \u05DC\u05D2\u05E8\u05E1\u05D4 \u05DE\u05D3\u05D5\u05D9\u05E7\u05EA`,`${i.length} outside actions not pinned to an exact version`)),r.length||r.push(S(t,"\u05E9\u05D9\u05E0\u05D5\u05D9 \u05D1-CI \u05D1\u05DC\u05D9 \u05E1\u05D5\u05D3\u05D5\u05EA \u05D5\u05D1\u05DC\u05D9 \u05D4\u05E8\u05E9\u05D0\u05D5\u05EA \u05DB\u05EA\u05D9\u05D1\u05D4","a CI change with no secrets and no write access")),{risk:n,lines:r}}function es(e,t,r,n){let s=e.replace(/\\/g,"/"),i=typeof t.content=="string"?t.content:typeof t.new_string=="string"?t.new_string:Array.isArray(t.edits)?t.edits.map(c=>typeof c?.new_string=="string"?c.new_string:"").join(`
46
+ `):null;if(i===null)return null;if(/\/migrations\/[^/]+\.sql$/i.test(s))return Xa(i,r,n);if(/\/\.github\/workflows\/[^/]+\.ya?ml$/i.test(s))return Ka(i,r);let o=i.split(`
41
47
  `).length,a=typeof t.old_string=="string"?t.old_string.split(`
42
- `).length:0;return{risk:"review",lines:[v(r,`${n?"\u05DE\u05E9\u05E0\u05D4":"\u05D9\u05D5\u05E6\u05E8"} \u05E7\u05D5\u05D1\u05E5: +${o}${a?` \u2212${a}`:""} \u05E9\u05D5\u05E8\u05D5\u05EA`,`${n?"changes":"creates"} a file: +${o}${a?` \u2212${a}`:""} lines`)]}}function Jr(e,t){return[e.risk==="destructive"?v(t,"\u{1F534} \u05DE\u05D5\u05D7\u05E7 \u05D0\u05D5 \u05D7\u05D5\u05E9\u05E3 \u05DE\u05D9\u05D3\u05E2","\u{1F534} deletes or exposes data"):e.risk==="review"?v(t,"\u{1F7E1} \u05DB\u05D3\u05D0\u05D9 \u05DC\u05D4\u05E1\u05EA\u05DB\u05DC","\u{1F7E1} worth a look"):v(t,"\u{1F7E2} \u05E8\u05E7 \u05DE\u05D5\u05E1\u05D9\u05E3","\u{1F7E2} only adds"),...e.lines.slice(0,8).map(n=>`\u2022 ${n}`),...e.lines.length>8?[v(t,`\u05D5\u05E2\u05D5\u05D3 ${e.lines.length-8}`,`and ${e.lines.length-8} more`)]:[]].join(`
43
- `)}var Ia=new Set([".csv",".tsv",".txt",".md",".json",".log",".xml",".sql",".yaml",".yml",".eml",...Mt]),Ra=50*1024*1024,qr=8,Ta={israeli_id:"Israeli ID",credit_card:"card",iban:"IBAN",israeli_phone:"phone",email:"email",secret:"secret"};function kn(e){let t=mt(e).toLowerCase();return Ia.has(as(t))||ge.test(t)}var ls=/^(reports|receipts)(\/|$)|^(prefs|consent|flagged|statusline-prev|key-backup|connection)\.json$|^(gate|status)\.mjs$|^(gate|answers)\.log$/i,Ca=/\.nodata[\\/]+(device-key\.json|secrets\.json|credentials\.json|issuer-ed25519\.json|capsule\.json|capsule-key|shares|approvals|fabric-key\.json|machine-salt|pending-link\.json|api-shares\.json|secret-shares\.json|quarantine|bindings\.json|orgs)\b/i;function be(e){let t=_e(X(),".nodata").replace(/\\/g,"/").toLowerCase();if(!e.replace(/\\/g,"/").toLowerCase().startsWith(t+"/"))return!1;let n=e.replace(/\\/g,"/").slice(t.length+1);return n!==""&&!ls.test(n)}var Pa=["~","$home","${home}","%userprofile%","$env:userprofile","${env:userprofile}","$env:home","%homedrive%%homepath%"],La=/\.nodata(?=$|[\\/\s"'`|;&<>()])(?:[\\/]+([^\s"'`|;&<>()]*))?/gi,Na=/^\s*(ls|dir|tree|Get-ChildItem|gci)\b[^|;&]*$/i;function Oa(e){let t=(e.split(/[\s"'`=(|;&<>]/).pop()??"").replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase(),r=X().replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase();return t===r||Pa.includes(t)}function Da(e){if(Ca.test(e))return!0;for(let t of e.matchAll(La)){if(!Oa(e.slice(0,t.index).replace(/[\\/]+$/,"")))continue;let r=(t[1]??"").replace(/\\/g,"/").replace(/\/+$/,"");if(r===""){if(!Na.test(e))return!0;continue}if(/[*?[\]{}]/.test(r)||!ls.test(r))return!0}return!1}var Q=e=>e.startsWith("mcp__"),vn=e=>/^mcp__.+__nodata_[a-z0-9_]+$/i.test(e),Fa=/(path|file|dir|folder|root|uri|target|source|destination|cwd)/i,ja=/(write|edit|create|save|update|delete|remove|move|rename|append|put|upload|patch|insert|mkdir)/i,Ma=/(search|grep|find|glob|list|tree|director|query)/i,Qr=16;function gt(e){let t=e.split("__").slice(2).join("__");return ja.test(t)?"write":Ma.test(t)?"search":"read"}function Pe(e,t){let r=[],n=(i,o)=>{let a=i.trim();if(/^file:\/\//i.test(a))try{a=decodeURIComponent(new URL(a).pathname).replace(/^\/([a-zA-Z]:)/,"$1")}catch{return}else if(!(o||/^(~[\\/]|\/|[a-zA-Z]:[\\/])/.test(a)))return;if(!a||a.length>1024||/[\n\r]/.test(a)||/^[a-z][a-z0-9+.-]*:\/\//i.test(a))return;let c=D(t,a.replace(/^~(?=[\\/]|$)/,X()));!r.includes(c)&&r.length<Qr&&r.push(c)},s=(i,o,a)=>{if(!(a>3||r.length>=Qr)){if(typeof i=="string")n(i,Fa.test(o));else if(Array.isArray(i))for(let c of i.slice(0,50))s(c,o,a+1);else if(i&&typeof i=="object")for(let[c,l]of Object.entries(i))s(l,c,a+1)}};return s(e,"",0),r}var gn=/(\.claude[\\/]+settings(\.local)?\.json|node_modules[\\/]+@nodatachat[\\/])/i,Ha=/(>|\bsed\s+-i|\btee\b|\b(rm|del|erase|mv|move|cp|copy|ren|rename)\b|Set-Content|Add-Content|Out-File|Remove-Item|Move-Item|Copy-Item|Rename-Item|WriteAllText|writeFileSync|unlinkSync)/i;function Ua(e,t,r){if(e==="Bash"||e==="PowerShell"){let s=typeof t.command=="string"?t.command:"";return gn.test(s)&&Ha.test(s)}if(Q(e))return gt(e)==="write"&&Pe(t,r).some(s=>gn.test(s.replace(/\\/g,"/")));let n=typeof t.file_path=="string"?t.file_path:typeof t.notebook_path=="string"?t.notebook_path:"";return n?gn.test((q(n)?n:D(r,n)).replace(/\\/g,"/")):!1}function Ba(e){return kn(e)||Je(e)!==null||qe(e)!==null}var ft=class extends Error{};function za(e){let t=as(e).toLowerCase(),r=wn(e),n,s;if(t===".csv"||t===".tsv")s=r.toString("utf8"),n=Bt(s,t===".tsv"?" ":void 0).counts;else if(Mt.has(t)){let o=t===".xlsx"||t===".xlsm"?Gt(r):null,a=jt(r,t);if(!a&&!o)throw new ft;s=a?.text??"",n=o?o.counts:U(s).counts}else s=r.toString("utf8"),n=U(s).counts;let i=Oe.filter(o=>o.pattern.test(s)).length;return ge.test(mt(e).toLowerCase())&&(i=Math.max(i,Vt(s))),i&&(n.secret=Math.max(n.secret??0,i)),n}var Wa={israeli_id:"\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA",id:"\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA",credit_card:"\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9",iban:"IBAN",israeli_phone:"\u05D8\u05DC\u05E4\u05D5\u05DF",phone:"\u05D8\u05DC\u05E4\u05D5\u05DF",email:'\u05D3\u05D5\u05D0"\u05DC',secret:"\u05E1\u05D5\u05D3",name:"\u05E9\u05DD",address:"\u05DB\u05EA\u05D5\u05D1\u05EA",policy:"\u05DE\u05E1\u05E4\u05E8 \u05E4\u05D5\u05DC\u05D9\u05E1\u05D4",agent_id:"\u05DE\u05E1\u05E4\u05E8 \u05E1\u05D5\u05DB\u05DF",financial:"\u05DE\u05D9\u05D3\u05E2 \u05E4\u05D9\u05E0\u05E0\u05E1\u05D9",medical:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9",dob:"\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4",bank_account:"\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7",plate:"\u05DE\u05E1\u05E4\u05E8 \u05E8\u05DB\u05D1"};function ds(e){let t=Y()==="he",r=n=>(t?Wa[n]:Ta[n])??n;return Object.entries(e).sort((n,s)=>s[1]-n[1]).map(([n,s])=>`${s} ${n.startsWith("column:")?`${r(n.slice(7))} (${t?"\u05E2\u05DE\u05D5\u05D3\u05D4":"column"})`:r(n)}`).join(", ")}function Ga(e){return ds(e)}function us(e,t,r){let n=i=>q(i)?i:D(r,i),s=i=>{try{return ht(i).isFile()}catch{return!1}};if(e==="Read"&&typeof t.file_path=="string")return[n(t.file_path)];if(e==="Grep"&&typeof t.path=="string"&&s(n(t.path)))return[n(t.path)];if(Q(e))return gt(e)==="write"?[]:Pe(t,r).filter(s).slice(0,qr);if((e==="Bash"||e==="PowerShell")&&typeof t.command=="string"){let i=t.command,o=[...[...i.matchAll(/"([^"]*)"/g)].map(c=>c[1]),...[...i.matchAll(/'([^']*)'/g)].map(c=>c[1]),...i.split(/[\s|;&<>(),=`]+/)],a=[];for(let c of o){let l=c.trim().replace(/^['"]|['"]$/g,"").replace(/\\\\/g,"\\").replace(/^~(?=[\\/])/,X()).replace(/^\/([a-zA-Z])\//,(d,m)=>process.platform==="win32"?`${m}:/`:d);if(!l)continue;let p=n(l);if(!(!kn(l)&&!be(p)&&Je(p)===null&&qe(p)===null)&&(s(p)&&!a.includes(p)&&a.push(p),a.length>=qr))break}return a}return[]}function B(e){return e.replace(/\\+/g,"/")}function Va(e){let t=e.trim();return/[;|&\n]|`|\$\(/.test(t.replace(/^cmd(?:\.exe)?\s+\/c\s+/i,""))?!1:/^(?:cmd(?:\.exe)?\s+\/c\s+)?(?:explorer(?:\.exe)?|start|invoke-item|ii|start-process|open|xdg-open)\b/i.test(t)}function es(e,t){return`${B(e)}: ${t?I("\u05D4\u05E1\u05E8\u05D9\u05E7\u05D4 \u05D4\u05D0\u05D7\u05E8\u05D5\u05E0\u05D4 \u05DC\u05D0 \u05D4\u05E6\u05DC\u05D9\u05D7\u05D4 \u05DC\u05E7\u05E8\u05D5\u05D0 \u05D0\u05D5\u05EA\u05D5, \u05D5\u05D4\u05D5\u05D0 \u05D4\u05E9\u05EA\u05E0\u05D4 \u05DE\u05D0\u05D6 \u2014 \u05DC\u05D0 \u05E0\u05D1\u05D3\u05E7, \u05D4\u05EA\u05D9\u05D9\u05D7\u05E1 \u05D0\u05DC\u05D9\u05D5 \u05DB\u05E8\u05D2\u05D9\u05E9","your last scan could not read it, and it changed since \u2014 NOT checked, treat it as sensitive"):I("\u05D4\u05E1\u05E8\u05D9\u05E7\u05D4 \u05D4\u05D0\u05D7\u05E8\u05D5\u05E0\u05D4 \u05DC\u05D0 \u05D4\u05E6\u05DC\u05D9\u05D7\u05D4 \u05DC\u05E7\u05E8\u05D5\u05D0 \u05D0\u05D5\u05EA\u05D5 \u2014 \u05DC\u05D0 \u05E0\u05D1\u05D3\u05E7, \u05D4\u05EA\u05D9\u05D9\u05D7\u05E1 \u05D0\u05DC\u05D9\u05D5 \u05DB\u05E8\u05D2\u05D9\u05E9","your last scan could not read it \u2014 NOT checked, treat it as sensitive")}`}function fs(e,t,r){let n=[];if((e==="Bash"||e==="PowerShell")&&typeof t.command=="string"&&Va(t.command))return n;for(let s of us(e,t,r)){if(!Ba(s)||kr(s)||!xn(s))continue;let i=qe(s);if(!kn(s)){let o=Je(s);o?n.push({line:`${B(s)}: ${I("\u05E7\u05D5\u05D3 \u05E9\u05D4\u05E1\u05E8\u05D9\u05E7\u05D4 \u05D4\u05D0\u05D7\u05E8\u05D5\u05E0\u05D4 \u05E1\u05D9\u05DE\u05E0\u05D4","code your last scan flagged")} \u2014 ${Ga(o)}`,kind:"flagged_code"}):i&&n.push({line:es(s,i.changed),kind:"unread"});continue}try{if(ht(s).size>Ra)n.push({line:`${B(s)}: too large to check here (over 50 MB)`,kind:"too_large"});else{let o=za(s);Object.keys(o).length?n.push({line:`${B(s)}: ${ds(o)}`,kind:"data_file"}):i&&!i.changed&&n.push({line:es(s,!1),kind:"unread"})}}catch(o){n.push(o instanceof ft?{line:`${B(s)}: ${I("\u05DC\u05D0 \u05E0\u05D9\u05EA\u05DF \u05DC\u05E7\u05E8\u05D5\u05D0 \u05D0\u05EA \u05D4\u05D8\u05E7\u05E1\u05D8 (\u05E1\u05E8\u05D9\u05E7\u05D4, \u05D4\u05E6\u05E4\u05E0\u05D4 \u05D0\u05D5 \u05D2\u05D5\u05E4\u05DF \u05DC\u05D0 \u05E0\u05EA\u05DE\u05DA) \u2014 \u05DC\u05D0 \u05E0\u05D1\u05D3\u05E7, \u05D4\u05EA\u05D9\u05D9\u05D7\u05E1 \u05D0\u05DC\u05D9\u05D5 \u05DB\u05E8\u05D2\u05D9\u05E9","its text could not be read (a scan, encryption or an unsupported font) \u2014 NOT checked, treat it as sensitive")}`,kind:"unreadable"}:{line:`${B(s)}: could not be checked`,kind:"unreadable"})}}return n}var bn=/(?:\.aws[\\/]+credentials|\.npmrc|\.yarnrc\.yml|\.pypirc|[._]netrc|\.git-credentials|\.pgpass|\.docker[\\/]+config\.json|\.kube[\\/]+config|gh[\\/]+hosts\.yml|\.supabase[\\/]+access-token|application_default_credentials\.json|gcloud[\\/]+(?:credentials|access_tokens)\.db|\.azure[\\/]+(?:msal_token_cache|accessTokens)|com\.vercel\.cli[\\/]+auth\.json|\.ssh[\\/]+id_(?:rsa|ed25519|ecdsa|dsa)(?![\w.]))/i,pt=/(?:TOKEN|SECRET|PASSW(?:OR)?D|API_?KEY|PRIVATE_?KEY|ACCESS_?KEY|CREDENTIAL|SERVICE_ROLE|_KEY$)/i,ps="the vault's secrets, outside nodata_run's per-command approval",Xa=/(?:^|[^\w.@-])(?:npx|pnpx|bunx|npm|pnpm|yarn|bun|node|nodejs|deno|nodata-mcp)(?:\.cmd|\.exe|\.ps1|\.js)?(?![\w-])[\s\S]*?(?<![\w-])secrets-(?:run|login|set|import|share)(?![\w-])/i;function Ka(e){return Xa.test(e)}var Za=[[/^(?:env|set|export\s+-p|declare\s+-x|get-childitem\s+env:\S*|gci\s+env:\S*|dir\s+env:\S*|ls\s+env:\S*)\s*$/i,"every environment variable"],[/^gh\s+auth\s+(?:token\b|status\b.*(?:\s-t\b|--show-token))/i,"the GitHub login token"],[/^gcloud\s+auth\s+(?:application-default\s+)?print-(?:access|identity)-token\b/i,"a Google Cloud access token"],[/^az\s+account\s+get-access-token\b/i,"an Azure access token"],[/^aws\s+(?:configure\s+(?:get\s+\S*(?:secret|token)\S*|export-credentials)|sts\s+get-session-token|ecr\s+get-login-password)\b/i,"AWS credentials"],[/^supabase\s+projects\s+api-keys\b/i,"the project's Supabase keys (incl. service_role)"],[/^heroku\s+auth:token\b/i,"the Heroku login token"],[/^op\s+(?:read|item\s+get)\b/i,"a 1Password secret"],[/^vault\s+(?:kv\s+get|read)\b/i,"a Vault secret"],[/^doppler\s+secrets\b/i,"Doppler secrets"],[/^security\s+find-(?:generic|internet)-password\b.*\s-w\b/i,"a keychain password"],[/^git\s+credential\s+fill\b/i,"a saved Git password"],[/^node\s+\S*nodata-pull\.mjs\b/i,ps],[/^kubectl\s+get\s+secrets?\b.*\s-o\b/i,"Kubernetes secrets"]],Ya=/^(?:echo|printf|print|write-output|write-host|say)\b/i,hs=/^(?:cat|type|get-content|gc|more|less|head|tail|bat|nl|strings|xxd|od|hexdump|grep|egrep|rg|select-string|sls|awk|sed|jq|yq|python\d*|py|node|ruby|perl)\b/i,Ja=/\$\{?env:([A-Za-z_][\w]*)|\$\{?([A-Za-z_][\w]*)|%([A-Za-z_][\w]*)%|GetEnvironmentVariable\(\s*['"]([^'"]+)['"]/g;function qa(e,t,r){let n=e==="Read"&&typeof t.file_path=="string"?t.file_path:e==="Grep"&&typeof t.path=="string"?t.path:"";if(n&&bn.test((q(n)?n:D(r,n)).replace(/\\/g,"/")))return`a saved login (${mt(n)})`;if(e!=="Bash"&&e!=="PowerShell"||typeof t.command!="string")return null;let s=t.command.split(/(\|\||&&|[;|\n])/);for(let i=0;i<s.length;i+=2){let o=s[i+1]==="|",a=s[i].trim().replace(/^(?:sudo\s+|cmd(?:\.exe)?\s+\/c\s+|powershell(?:\.exe)?\s+(?:-command\s+)?|pwsh\s+(?:-c(?:ommand)?\s+)?)+/i,"").replace(/^["']|["']$/g,"");if(hs.test(a)&&bn.test(a))return"a saved login file";if(Ka(a))return ps;for(let[l,p]of Za)if(l.test(a))return p;let c=a.match(/^printenv(?:\s+(\S+))?\s*$/i);if(c&&(!c[1]||pt.test(c[1])))return c[1]?`the variable ${c[1]}`:"every environment variable";if(!o&&(Ya.test(a)||/GetEnvironmentVariable/i.test(a)))for(let l of a.matchAll(Ja)){let p=l[1]??l[2]??l[3]??l[4]??"";if(pt.test(p))return`the variable ${p}`}}return null}var ms=/^(?:grep|egrep|fgrep|rg|ag|ack|git\s+grep|findstr|select-string|sls)\b/i,Qa=/(?:^|\s)(?:-[a-zA-Z]*[rR][a-zA-Z]*|--recursive|--dereference-recursive|\/s|-recurse)(?=\s|$)/i,ec=new Set(["node_modules",".git",".next","dist","build",".venv","venv","__pycache__",".cache"]),ts=4e3,tc=5;function nc(e){let t=0,r=0,n=(s,i)=>{if(i>tc||t>ts)return;let o;try{o=Aa(s,{withFileTypes:!0})}catch{return}for(let a of o){if(++t>ts)return;let c=_e(s,a.name);a.isDirectory()?ec.has(a.name)||n(c,i+1):(ge.test(a.name.toLowerCase())||bn.test(c.replace(/\\/g,"/"))||be(c))&&r++}};return n(e,0),r}var Ce=e=>{try{return ht(e).isDirectory()}catch{return!1}};function rc(e,t){let r=cs(D(t),D(e));return r===""||!r.startsWith("..")&&!q(r)}function sc(e,t,r){let n=i=>D(r,i.replace(/^~(?=[\\/]|$)/,X())),s=[];if(e==="Grep"){let i=typeof t.path=="string"&&t.path?n(t.path):D(r);if(Ce(i)){let o=[t.pattern,t.glob,t.type].filter(a=>typeof a=="string").join(" ");s.push({roots:[i],bySecret:pt.test(o)||/\.env|env\b/i.test(String(t.glob??""))})}}else if((e==="Bash"||e==="PowerShell")&&typeof t.command=="string")for(let i of t.command.split(/\|\||&&|[;|\n]/)){let o=i.trim().replace(/^(?:sudo\s+|xargs\s+(?:-\S+\s+)*)/i,"");if(!/^find\b.*-exec\s+(?:grep|egrep|rg|cat)\b/i.test(o)&&!(ms.test(o)&&(Qa.test(o)||/^(?:rg|ag|ack|git\s+grep)\b/i.test(o))))continue;let l=o.split(/\s+/).slice(1).map(p=>p.replace(/^['"]|['"]$/g,"")).filter(p=>p&&!p.startsWith("-")&&!/^\/[a-z]$/i.test(p)).map(n).filter(Ce);s.push({roots:l.length?l:[D(r)],bySecret:pt.test(o)||/\.env\b/i.test(o)})}for(let i of s)for(let o of i.roots){if(!i.bySecret&&rc(o,r))continue;let a=nc(o);if(a>0)return{why:i.bySecret?"by_name":"outside",root:o,keyFiles:a}}return null}var gs=new Set(["Write","Edit","MultiEdit","NotebookEdit"]),ut=e=>gs.has(e)||Q(e)&&gt(e)==="write";function Sn(e,t,r){let n=s=>D(r,s.replace(/^~(?=[\\/]|$)/,X()));if(e==="Read"&&typeof t.file_path=="string")return{action:"read",paths:[n(t.file_path)],roots:[]};if(gs.has(e)){let s=typeof t.file_path=="string"?t.file_path:typeof t.notebook_path=="string"?t.notebook_path:"";return s?{action:"write",paths:[n(s)],roots:[]}:null}if(e==="Grep"||e==="Glob"){let s=typeof t.path=="string"&&t.path?n(t.path):D(r);return{action:"search",paths:[s],roots:Ce(s)?[s]:[]}}if(Q(e)){let s=Pe(t,r);if(!s.length)return null;let i=gt(e);return{action:i,paths:s,roots:i==="search"?s.filter(Ce):[]}}if((e==="Bash"||e==="PowerShell")&&typeof t.command=="string"){let s=t.command,o=[...[...s.matchAll(/"([^"]*)"/g)].map(l=>l[1]),...[...s.matchAll(/'([^']*)'/g)].map(l=>l[1]),...s.split(/[\s|;&<>(),=`]+/)].map(l=>l.trim()).filter(l=>l&&!l.startsWith("-")&&/[\\/.~]/.test(l)).filter(l=>e==="PowerShell"||!/^\\+$/.test(l)).map(n).filter(l=>xn(l)),a=s.split(/\|\||&&|[;|\n]/).some(l=>ms.test(l.trim())||/^find\b/i.test(l.trim())),c=o.filter(Ce);return{action:a?"search":hs.test(s.trim())?"read":"run",paths:[D(r),...o],roots:a?c.length?c:[D(r)]:[]}}return null}var ic=/(browser|playwright|puppeteer|chrome|chromium|stagehand|browserbase|selenium|webdriver)/i,oc=/(click|type|fill|press|select|submit|hover|drag|drop|upload|form|key|input|check|scroll|evaluate|dialog|tap|act\b|execute)/i,ac=/^(url|uri|href|link|address|page_?url|start_?url)$/i,ys=()=>_e(X(),".nodata","gate-sites.json"),cc=720*60*1e3,lc=50;function dc(e,t){let r,n,s=(i,o,a)=>{if(!(a>3||r)){if(typeof i=="string"){let c=i.trim();if(!/^https?:\/\//i.test(c)||c.length>4096)return;ac.test(o)?r=c:n??=c}else if(Array.isArray(i))for(let c of i.slice(0,50))s(c,o,a+1);else if(i&&typeof i=="object")for(let[c,l]of Object.entries(i))s(l,c,a+1)}};return s(e,"",0),r??(t?n:void 0)}function En(e,t){if(e==="WebFetch")return typeof t.url=="string"?{action:"browse",url:t.url}:null;if(!Q(e)||vn(e))return null;let r=e.split("__").slice(2).join("__"),n=ic.test(e),s=dc(t,n);return!s&&!n?null:{action:oc.test(r)?"interact":"browse",...s?{url:s}:{}}}function bs(){try{let e=JSON.parse(wn(ys(),"utf8")),t=Date.now(),r={};for(let[n,s]of Object.entries(e??{}))typeof s?.host=="string"&&typeof s.at=="number"&&t-s.at<cc&&(r[n]={host:s.host,at:s.at});return r}catch{return{}}}function uc(e){return e?bs()[e]?.host:void 0}function fc(e,t,r,n){if(!e||t==="WebFetch")return;let s=En(t,r);if(!s)return;let i="";try{i=typeof n=="string"?n:JSON.stringify(n??"")}catch{}let o=/Page URL:\s*(https?:\/\/[^\s"\\]+)/i.exec(i)?.[1]??/"(?:url|pageUrl|page_url)"\s*:\s*"(https?:\/\/[^"\\]+)"/i.exec(i)?.[1],a=tn(o??s.url??"");if(a)try{let c=bs();c[e]={host:a,at:Date.now()};let l=Object.entries(c).sort((p,d)=>d[1].at-p[1].at).slice(0,lc);os(_e(X(),".nodata"),{recursive:!0}),$a(ys(),JSON.stringify(Object.fromEntries(l))+`
44
- `,{mode:384})}catch{}}function pc(e,t,r,n=new Date,s,i){let o=En(e,t);if(!o)return null;let a;if(o.url){let y=tn(o.url);if(!y)return null;a=y}else a=uc(i);let{rules:c,tampered:l}=en(),p=sn(),d={allow:0,ask:1,clean_copy:2,deny:3},m={action:o.action,path:"",now:n,who:s,site:a},f=J(),g=null;for(let{owner:y,rules:h}of p){if(!st(y,D(r),f))continue;let x=rn(h,m);x&&(!g||d[x.rule.effect]>d[g.rule.effect])&&(g={...x,org:!0})}let u=null;if(l){let y=c.find(h=>h.site&&(a===void 0||nn(h.site,a)));y&&(u={rule:{...y,effect:"deny",when:[]},n:c.indexOf(y)+1,touched:a??"",tampered:!0})}else u=rn(c,m);return g&&(!u||d[g.rule.effect]>=d[u.rule.effect])?g:u}function ns(e,t,r,n=new Date,s){let i=Sn(e,t,r);if(!i)return null;let{rules:o,tampered:a}=en(),c=sn();if(!o.length&&!c.length)return null;let l={allow:0,ask:1,clean_copy:2,deny:3},p=J(),d=null;for(let{owner:f,rules:g}of c){for(let u of i.paths){if(!st(f,u,p))continue;let y=lt(g,{action:i.action,path:u,now:n,who:s});y&&(!d||l[y.rule.effect]>l[d.rule.effect])&&(d={...y,org:!0})}for(let u of i.roots){if(!st(f,u,p))continue;let y=dt(g,u,i.action,n,s);y&&y.rule.effect!=="allow"&&(!d||l[y.rule.effect]>l[d.rule.effect])&&(d={...y,org:!0})}}let m=hc(o,a,i,n,l,s);return d&&(!m||l[d.rule.effect]>=l[m.rule.effect])?d:m}function hc(e,t,r,n,s,i){if(!e.length)return null;if(t){for(let a of r.paths){let c=e.find(l=>ae(l.path,a)||ae(a,l.path));if(c)return{rule:{...c,effect:"deny",when:[]},n:e.indexOf(c)+1,touched:a,tampered:!0}}return null}let o=null;for(let a of r.paths){let c=lt(e,{action:r.action,path:a,now:n,who:i});c&&(!o||s[c.rule.effect]>s[o.rule.effect])&&(o=c)}for(let a of r.roots){let c=dt(e,a,r.action,n,i);c&&c.rule.effect!=="allow"&&(!o||s[c.rule.effect]>s[o.rule.effect])&&(o=c)}return o}function mc(e){let t;try{t=typeof e=="string"?e:JSON.stringify(e??"")}catch{return{}}if(!t)return{};t=t.slice(0,2*1024*1024);let r={};for(let n of Se()){let s=new RegExp(n.pattern.source,n.pattern.flags.includes("g")?n.pattern.flags:n.pattern.flags+"g"),i=(t.match(s)??[]).length;i&&(r[n.id]=(r[n.id]??0)+i)}return r}function gc(e){let t=Object.keys(e);if(t.length===0)return null;let r=t.reduce((s,i)=>s+e[i],0),n=[...new Set(t.map(s=>{let i=Xt(s);return i.url?`${i.provider}: ${i.url}`:i.provider}))];return`NoData \xB7 A CREDENTIAL IS IN THIS OUTPUT (${r}: ${t.join(", ")}). It is now in this conversation and was sent to the AI model. Do not repeat, quote, shorten, mask-by-hand or reuse it \u2014 not in your answer, not in a command, not in a file. Tell the user in one line that a key was shown here and should be replaced at its provider (${n.join(" \xB7 ")}); nodata_scan_folder gives the full steps. Next time, run commands that need secrets through nodata_run: the output comes back with every value blanked.`+(Y()==="he"?" Answer the user in Hebrew.":"")}function yc(e,t,r,n){let s=Br();if(!s.length)return null;let i=Sn(e,t,r);if(!i)return null;let o=new Date,a=i.paths.map(l=>lt(s,{action:i.action,path:l,now:o,who:n})).find(Boolean)??i.roots.map(l=>dt(s,l,i.action,o,n)).find(Boolean);if(!a)return null;let c=String(a.rule.when?.[0]?.value??"");return I(`NoData \u05D7\u05E1\u05DD: ${B(a.rule.path)} \u05E2\u05D5\u05D1\u05D3\u05EA \u05E2\u05D1\u05D5\u05E8 \u05D0\u05E8\u05D2\u05D5\u05DF \u05D0\u05D7\u05E8 (${c}) \u05DE\u05D6\u05D4 \u05E9\u05DC \u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5. \u05E1\u05D5\u05DB\u05DF \u05E9\u05E2\u05D5\u05D1\u05D3 \u05DB\u05D0\u05DF \u05E2\u05D1\u05D5\u05E8 \u05D0\u05E8\u05D2\u05D5\u05DF \u05D0\u05D7\u05D3 \u05DC\u05D0 \u05E0\u05D5\u05D2\u05E2 \u05D1\u05E7\u05D1\u05E6\u05D9\u05DD \u05E9\u05DC \u05D0\u05E8\u05D2\u05D5\u05DF \u05D0\u05D7\u05E8 \u2014 \u05D2\u05DD \u05DC\u05D0 \u05D1\u05D0\u05D9\u05E9\u05D5\u05E8. \u05DC\u05E2\u05D1\u05D5\u05D3\u05D4 \u05E9\u05DD: \u05DC\u05E4\u05EA\u05D5\u05D7 \u05D0\u05EA \u05D4\u05E1\u05D5\u05DB\u05DF \u05D1\u05EA\u05D5\u05DA \u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D4\u05D9\u05D0.`,`NoData refused: ${B(a.rule.path)} works for another organisation (${c}) than this folder. An agent working here for one organisation does not touch another organisation's files \u2014 not even with approval. To work there, start the agent inside that folder.`)}function bc(e,t,r){let n=(e==="Bash"||e==="PowerShell")&&typeof t.command=="string"?t.command:"",s=(e==="Grep"||e==="Glob")&&typeof t.path=="string"?t.path:e==="Read"&&typeof t.file_path=="string"?t.file_path:"";return n&&Da(n)||s&&be(q(s)?s:D(r,s))||Q(e)&&Pe(t,r).some(be)||us(e,t,r).some(be)?I("NoData \u05D7\u05E1\u05DD: \u05D6\u05D4 \u05E7\u05D5\u05D1\u05E5 \u05DE\u05E4\u05EA\u05D7 \u05E9\u05DC NoData (\u05DE\u05E4\u05EA\u05D7 \u05D4\u05DE\u05DB\u05E9\u05D9\u05E8, \u05D4\u05DB\u05E1\u05E4\u05EA \u05D0\u05D5 \u05D4\u05D0\u05E8\u05D2\u05D5\u05DF). \u05DE\u05D9 \u05E9\u05E7\u05D5\u05E8\u05D0 \u05D0\u05D5\u05EA\u05D5 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E4\u05EA\u05D5\u05D7 \u05DB\u05DC \u05E7\u05D5\u05D1\u05E5 \u05E0\u05E2\u05D5\u05DC, \u05D5\u05DC\u05DB\u05DF \u05D0\u05E3 \u05E1\u05D5\u05DB\u05DF \u05DC\u05D0 \u05E7\u05D5\u05E8\u05D0 \u05D0\u05D5\u05EA\u05D5 \u2014 \u05D2\u05DD \u05DC\u05D0 \u05D1\u05D0\u05D9\u05E9\u05D5\u05E8. \u05DC-NoData \u05D0\u05D9\u05DF \u05E2\u05D5\u05EA\u05E7 \u05E9\u05DC \u05D4\u05DE\u05E4\u05EA\u05D7 \u05D5\u05D0\u05D9\u05DF \u05D3\u05E8\u05DA \u05DC\u05E9\u05D7\u05D6\u05E8 \u05D0\u05D5\u05EA\u05D5: \u05D4\u05D2\u05D9\u05D1\u05D5\u05D9 \u05E9\u05DC\u05DA \u05D4\u05D5\u05D0 \u05D4\u05D3\u05E8\u05DA \u05D4\u05D9\u05D7\u05D9\u05D3\u05D4. \u05DC\u05D2\u05D9\u05D1\u05D5\u05D9, \u05D1\u05D8\u05E8\u05DE\u05D9\u05E0\u05DC \u05D5\u05DC\u05D0 \u05D1\u05E6'\u05D0\u05D8: npx -y @nodatachat/mcp@latest key-backup E: (E: = \u05D4\u05D3\u05D9\u05E1\u05E7-\u05D0\u05D5\u05DF-\u05E7\u05D9).","NoData refused: this is one of NoData's own key files (the device key, the vault login or the org credential). Whoever reads it can open every sealed file, so no agent reads it \u2014 not even with approval. NoData holds no copy of this key and cannot recover it: your backup is the only recovery. To back it up, in a terminal (not the chat): npx -y @nodatachat/mcp@latest key-backup E: (E: = your USB drive). Do not suggest other recovery routes \u2014 there are none."):null}var An="unreported",_c=new Set(["auto","bypassPermissions",An]),yn=e=>!!e&&_c.has(e);function ye(e){return e===An?I("\u05D4\u05E1\u05E9\u05DF \u05D4\u05D6\u05D4 \u05DC\u05D0 \u05DE\u05D3\u05D5\u05D5\u05D7 \u05D0\u05DD \u05D0\u05D3\u05DD \u05E2\u05D5\u05E0\u05D4 \u05D1\u05D5 \u05E2\u05DC \u05D1\u05E7\u05E9\u05EA \u05D0\u05D9\u05E9\u05D5\u05E8 (\u05DB\u05DA \u05D1-Claude Desktop \u05D5-Cowork), \u05D5\u05DC\u05DB\u05DF NoData \u05DC\u05D0 \u05E1\u05D5\u05DE\u05DB\u05EA \u05E2\u05DC \u05D7\u05DC\u05D5\u05DF \u05D4\u05D0\u05D9\u05E9\u05D5\u05E8 \u05E9\u05DC\u05D5","this session does not report whether a person answers its approval dialog (as in Claude Desktop and Cowork), so NoData does not rely on that dialog"):I(`\u05D4\u05E1\u05E9\u05DF \u05D4\u05D6\u05D4 \u05E8\u05E5 \u05D1\u05DE\u05E6\u05D1 ${e}, \u05E9\u05D1\u05D5 Claude Code \u05E2\u05D5\u05E0\u05D4 \u05D1\u05E2\u05E6\u05DE\u05D5 \u05E2\u05DC \u05D1\u05E7\u05E9\u05EA \u05D0\u05D9\u05E9\u05D5\u05E8`,`this session runs in ${e} mode, where Claude Code answers its own approval dialog`)}var _n=e=>e.charAt(0).toUpperCase()+e.slice(1);function rs(e,t){let r=cs(t,e);return r&&!r.startsWith("..")&&!q(r)?B(r):mt(e)}function ss(e,t,r){if(!ut(t)||Q(t))return"";let n=xn(e),s=r;if(n&&(t==="Edit"||t==="MultiEdit"))try{let o=ht(e).size<=1e6?wn(e,"utf8"):null,a=t==="Edit"?[r]:Array.isArray(r.edits)?r.edits:[];for(let c of a)o!==null&&typeof c.old_string=="string"&&typeof c.new_string=="string"&&(o=c.replace_all?o.split(c.old_string).join(c.new_string):o.replace(c.old_string,()=>c.new_string));o!==null&&(s={content:o,old_string:r.old_string})}catch{}let i=Yr(e,s,Y()==="he"?"he":"en",n);return i?Jr(i,Y()==="he"?"he":"en"):""}function is(e,t,r,n,s,i,o=""){let a=o?`
45
- ${o}`:"";if(!mn())return{decision:"deny",kind:"checkpoint",reason:I(`NoData: ${s}. ${ye(i)}, \u05D5\u05D4\u05DE\u05D7\u05E9\u05D1 \u05DC\u05D0 \u05DE\u05D7\u05D5\u05D1\u05E8 \u05DC-NoData \u05DB\u05D3\u05D9 \u05DC\u05E9\u05D0\u05D5\u05DC \u05D0\u05EA \u05D4\u05D1\u05E2\u05DC\u05D9\u05DD \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF. \u05DC\u05DB\u05DF \u05D4\u05E6\u05E2\u05D3 \u05E0\u05D7\u05E1\u05DD. \u05D0\u05E4\u05E9\u05E8 \u05DC\u05D7\u05D1\u05E8 \u05D0\u05EA \u05D4\u05DE\u05D7\u05E9\u05D1 (nodata_connect), \u05D0\u05D5 \u05E9\u05D4\u05D0\u05D3\u05DD \u05D9\u05E2\u05E9\u05D4 \u05D0\u05EA \u05D4\u05E6\u05E2\u05D3 \u05D1\u05E2\u05E6\u05DE\u05D5.`,`NoData: ${s}. ${_n(ye(i))}, and this computer is not connected to NoData to ask its owner in the browser. So the step is refused. Connect the computer (nodata_connect), or the person takes this step themselves.`)+a};let c=un(e,t,r,n);return hn(c)?{decision:"allow"}:(pn({id:c,site:"",file:e,action:t,tool:r,what:fn(n),...o?{summary:o}:{}}),{decision:"deny",kind:"checkpoint",reason:I(`NoData: ${s}. ${ye(i)}, \u05D5\u05DC\u05DB\u05DF \u05D4\u05E6\u05E2\u05D3 \u05DE\u05D7\u05DB\u05D4 \u05DC\u05D0\u05D9\u05E9\u05D5\u05E8 \u05E9\u05DC \u05D1\u05E2\u05DC\u05D9 \u05D4\u05DE\u05D7\u05E9\u05D1 \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF.
46
- \u05DB\u05D3\u05D9 \u05DC\u05D1\u05E7\u05E9: nodata_rules {action:"approve", checkpoint:"${c}"}. \u05D4\u05D5\u05D0 \u05E4\u05D5\u05EA\u05D7 \u05D0\u05EA \u05D3\u05E3 \u05D4\u05D0\u05D9\u05E9\u05D5\u05E8 \u05D5\u05DE\u05D7\u05DB\u05D4. \u05D0\u05D7\u05E8\u05D9 \u05D4\u05D0\u05D9\u05E9\u05D5\u05E8, \u05D7\u05D6\u05D5\u05E8 \u05E2\u05DC \u05D0\u05D5\u05EA\u05D4 \u05E7\u05E8\u05D9\u05D0\u05D4 \u05D1\u05D3\u05D9\u05D5\u05E7 (\u05E4\u05E2\u05DD \u05D0\u05D7\u05EA, \u05EA\u05D5\u05DA 5 \u05D3\u05E7\u05D5\u05EA). \u05D0\u05EA\u05D4 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05D0\u05E9\u05E8 \u05D1\u05E2\u05E6\u05DE\u05DA.`,`NoData: ${s}. ${_n(ye(i))}, so the step waits for the computer's owner to approve it in the browser.
47
- To ask: nodata_rules {action:"approve", checkpoint:"${c}"}. It opens the approval page and waits. Once approved, repeat exactly the same call (once, within 5 minutes). You cannot approve it yourself.`)+a})}function xc(e,t,r,n,s,i,o){if(vn(e))return{decision:"allow"};let a=Dr(r),c={...s,org:a??void 0},l=bc(e,t,r);if(l)return{decision:"deny",reason:l,kind:"nodata_key"};let p=yc(e,t,r,c);if(p)return{decision:"deny",reason:p,kind:"org_wall"};let d=qa(e,t,r);if(d&&ns(e,t,r,new Date,c)?.rule.effect!=="deny"){let S=I(`NoData: \u05D4\u05E4\u05E7\u05D5\u05D3\u05D4 \u05D4\u05D6\u05D5 \u05DE\u05E6\u05D9\u05D2\u05D4 ${d}. \u05DE\u05D4 \u05E9\u05D4\u05D9\u05D0 \u05DE\u05D3\u05E4\u05D9\u05E1\u05D4 \u05E0\u05DB\u05E0\u05E1 \u05DC\u05E9\u05D9\u05D7\u05D4 \u05D5\u05E0\u05E9\u05DC\u05D7 \u05DC\u05DE\u05D5\u05D3\u05DC \u05D4\u05D1\u05D9\u05E0\u05D4 \u05D4\u05DE\u05DC\u05D0\u05DB\u05D5\u05EA\u05D9\u05EA, \u05D5\u05DE\u05E4\u05EA\u05D7 \u05E9\u05E0\u05E8\u05D0\u05D4 \u05DB\u05D0\u05DF \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D7\u05DC\u05D9\u05E3.
48
+ `).length:0;return{risk:"review",lines:[S(r,`${n?"\u05DE\u05E9\u05E0\u05D4":"\u05D9\u05D5\u05E6\u05E8"} \u05E7\u05D5\u05D1\u05E5: +${o}${a?` \u2212${a}`:""} \u05E9\u05D5\u05E8\u05D5\u05EA`,`${n?"changes":"creates"} a file: +${o}${a?` \u2212${a}`:""} lines`)]}}function ts(e,t){return[e.risk==="destructive"?S(t,"\u{1F534} \u05DE\u05D5\u05D7\u05E7 \u05D0\u05D5 \u05D7\u05D5\u05E9\u05E3 \u05DE\u05D9\u05D3\u05E2","\u{1F534} deletes or exposes data"):e.risk==="review"?S(t,"\u{1F7E1} \u05DB\u05D3\u05D0\u05D9 \u05DC\u05D4\u05E1\u05EA\u05DB\u05DC","\u{1F7E1} worth a look"):S(t,"\u{1F7E2} \u05E8\u05E7 \u05DE\u05D5\u05E1\u05D9\u05E3","\u{1F7E2} only adds"),...e.lines.slice(0,8).map(n=>`\u2022 ${n}`),...e.lines.length>8?[S(t,`\u05D5\u05E2\u05D5\u05D3 ${e.lines.length-8}`,`and ${e.lines.length-8} more`)]:[]].join(`
49
+ `)}var qa=new Set([".csv",".tsv",".txt",".md",".json",".log",".xml",".sql",".yaml",".yml",".eml",...zt]),Qa=50*1024*1024,ns=8,ec={israeli_id:"Israeli ID",credit_card:"card",iban:"IBAN",israeli_phone:"phone",email:"email",secret:"secret"};function An(e){let t=bt(e).toLowerCase();return qa.has(us(t))||ge.test(t)}var ps=/^(reports|receipts)(\/|$)|^(prefs|consent|flagged|statusline-prev|key-backup|connection)\.json$|^(gate|status)\.mjs$|^(gate|answers)\.log$/i,tc=/\.nodata[\\/]+(device-key\.json|secrets\.json|credentials\.json|issuer-ed25519\.json|capsule\.json|capsule-key|shares|approvals|fabric-key\.json|machine-salt|pending-link\.json|api-shares\.json|secret-shares\.json|quarantine|bindings\.json|orgs)\b/i;function be(e){let t=_e(K(),".nodata").replace(/\\/g,"/").toLowerCase();if(!e.replace(/\\/g,"/").toLowerCase().startsWith(t+"/"))return!1;let n=e.replace(/\\/g,"/").slice(t.length+1);return n!==""&&!ps.test(n)}var nc=["~","$home","${home}","%userprofile%","$env:userprofile","${env:userprofile}","$env:home","%homedrive%%homepath%"],rc=/\.nodata(?=$|[\\/\s"'`|;&<>()])(?:[\\/]+([^\s"'`|;&<>()]*))?/gi,sc=/^\s*(ls|dir|tree|Get-ChildItem|gci)\b[^|;&]*$/i;function ic(e){let t=(e.split(/[\s"'`=(|;&<>]/).pop()??"").replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase(),r=K().replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase();return t===r||nc.includes(t)}function oc(e){if(tc.test(e))return!0;for(let t of e.matchAll(rc)){if(!ic(e.slice(0,t.index).replace(/[\\/]+$/,"")))continue;let r=(t[1]??"").replace(/\\/g,"/").replace(/\/+$/,"");if(r===""){if(!sc.test(e))return!0;continue}if(/[*?[\]{}]/.test(r)||!ps.test(r))return!0}return!1}var ne=e=>e.startsWith("mcp__"),$n=e=>/^mcp__.+__nodata_[a-z0-9_]+$/i.test(e),ac=/(path|file|dir|folder|root|uri|target|source|destination|cwd)/i,cc=/(write|edit|create|save|update|delete|remove|move|rename|append|put|upload|patch|insert|mkdir)/i,lc=/(search|grep|find|glob|list|tree|director|query)/i,rs=16;function _t(e){let t=e.split("__").slice(2).join("__");return cc.test(t)?"write":lc.test(t)?"search":"read"}function Le(e,t){let r=[],n=(i,o)=>{let a=i.trim();if(/^file:\/\//i.test(a))try{a=decodeURIComponent(new URL(a).pathname).replace(/^\/([a-zA-Z]:)/,"$1")}catch{return}else if(!(o||/^(~[\\/]|\/|[a-zA-Z]:[\\/])/.test(a)))return;if(!a||a.length>1024||/[\n\r]/.test(a)||/^[a-z][a-z0-9+.-]*:\/\//i.test(a))return;let c=D(t,a.replace(/^~(?=[\\/]|$)/,K()));!r.includes(c)&&r.length<rs&&r.push(c)},s=(i,o,a)=>{if(!(a>3||r.length>=rs)){if(typeof i=="string")n(i,ac.test(o));else if(Array.isArray(i))for(let c of i.slice(0,50))s(c,o,a+1);else if(i&&typeof i=="object")for(let[c,l]of Object.entries(i))s(l,c,a+1)}};return s(e,"",0),r}var xn=/(\.claude[\\/]+settings(\.local)?\.json|node_modules[\\/]+@nodatachat[\\/])/i,dc=/(>|\bsed\s+-i|\btee\b|\b(rm|del|erase|mv|move|cp|copy|ren|rename)\b|Set-Content|Add-Content|Out-File|Remove-Item|Move-Item|Copy-Item|Rename-Item|WriteAllText|writeFileSync|unlinkSync)/i;function uc(e,t,r){if(e==="Bash"||e==="PowerShell"){let s=typeof t.command=="string"?t.command:"";return xn.test(s)&&dc.test(s)}if(ne(e))return _t(e)==="write"&&Le(t,r).some(s=>xn.test(s.replace(/\\/g,"/")));let n=typeof t.file_path=="string"?t.file_path:typeof t.notebook_path=="string"?t.notebook_path:"";return n?xn.test((te(n)?n:D(r,n)).replace(/\\/g,"/")):!1}function fc(e){return An(e)||et(e)!==null||tt(e)!==null}var mt=class extends Error{};function pc(e){let t=us(e).toLowerCase(),r=En(e),n,s;if(t===".csv"||t===".tsv")s=r.toString("utf8"),n=Vt(s,t===".tsv"?" ":void 0).counts;else if(zt.has(t)){let o=t===".xlsx"||t===".xlsm"?Zt(r):null,a=Bt(r,t);if(!a&&!o)throw new mt;s=a?.text??"",n=o?o.counts:B(s).counts}else s=r.toString("utf8"),n=B(s).counts;let i=De.filter(o=>o.pattern.test(s)).length;return ge.test(bt(e).toLowerCase())&&(i=Math.max(i,Yt(s))),i&&(n.secret=Math.max(n.secret??0,i)),n}var hc={israeli_id:"\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA",id:"\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA",credit_card:"\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9",iban:"IBAN",israeli_phone:"\u05D8\u05DC\u05E4\u05D5\u05DF",phone:"\u05D8\u05DC\u05E4\u05D5\u05DF",email:'\u05D3\u05D5\u05D0"\u05DC',secret:"\u05E1\u05D5\u05D3",name:"\u05E9\u05DD",address:"\u05DB\u05EA\u05D5\u05D1\u05EA",policy:"\u05DE\u05E1\u05E4\u05E8 \u05E4\u05D5\u05DC\u05D9\u05E1\u05D4",agent_id:"\u05DE\u05E1\u05E4\u05E8 \u05E1\u05D5\u05DB\u05DF",financial:"\u05DE\u05D9\u05D3\u05E2 \u05E4\u05D9\u05E0\u05E0\u05E1\u05D9",medical:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9",dob:"\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4",bank_account:"\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7",plate:"\u05DE\u05E1\u05E4\u05E8 \u05E8\u05DB\u05D1"};function hs(e){let t=Q()==="he",r=n=>(t?hc[n]:ec[n])??n;return Object.entries(e).sort((n,s)=>s[1]-n[1]).map(([n,s])=>`${s} ${n.startsWith("column:")?`${r(n.slice(7))} (${t?"\u05E2\u05DE\u05D5\u05D3\u05D4":"column"})`:r(n)}`).join(", ")}function mc(e){return hs(e)}function ms(e,t,r){let n=i=>te(i)?i:D(r,i),s=i=>{try{return yt(i).isFile()}catch{return!1}};if(e==="Read"&&typeof t.file_path=="string")return[n(t.file_path)];if(e==="Grep"&&typeof t.path=="string"&&s(n(t.path)))return[n(t.path)];if(ne(e))return _t(e)==="write"?[]:Le(t,r).filter(s).slice(0,ns);if((e==="Bash"||e==="PowerShell")&&typeof t.command=="string"){let i=t.command,o=[...[...i.matchAll(/"([^"]*)"/g)].map(c=>c[1]),...[...i.matchAll(/'([^']*)'/g)].map(c=>c[1]),...i.split(/[\s|;&<>(),=`]+/)],a=[];for(let c of o){let l=c.trim().replace(/^['"]|['"]$/g,"").replace(/\\\\/g,"\\").replace(/^~(?=[\\/])/,K()).replace(/^\/([a-zA-Z])\//,(d,h)=>process.platform==="win32"?`${h}:/`:d);if(!l)continue;let f=n(l);if(!(!An(l)&&!be(f)&&et(f)===null&&tt(f)===null)&&(s(f)&&!a.includes(f)&&a.push(f),a.length>=ns))break}return a}return[]}function z(e){return e.replace(/\\+/g,"/")}function gc(e){let t=e.trim();return/[;|&\n]|`|\$\(/.test(t.replace(/^cmd(?:\.exe)?\s+\/c\s+/i,""))?!1:/^(?:cmd(?:\.exe)?\s+\/c\s+)?(?:explorer(?:\.exe)?|start|invoke-item|ii|start-process|open|xdg-open)\b/i.test(t)}function ss(e,t){return`${z(e)}: ${t?T("\u05D4\u05E1\u05E8\u05D9\u05E7\u05D4 \u05D4\u05D0\u05D7\u05E8\u05D5\u05E0\u05D4 \u05DC\u05D0 \u05D4\u05E6\u05DC\u05D9\u05D7\u05D4 \u05DC\u05E7\u05E8\u05D5\u05D0 \u05D0\u05D5\u05EA\u05D5, \u05D5\u05D4\u05D5\u05D0 \u05D4\u05E9\u05EA\u05E0\u05D4 \u05DE\u05D0\u05D6 \u2014 \u05DC\u05D0 \u05E0\u05D1\u05D3\u05E7, \u05D4\u05EA\u05D9\u05D9\u05D7\u05E1 \u05D0\u05DC\u05D9\u05D5 \u05DB\u05E8\u05D2\u05D9\u05E9","your last scan could not read it, and it changed since \u2014 NOT checked, treat it as sensitive"):T("\u05D4\u05E1\u05E8\u05D9\u05E7\u05D4 \u05D4\u05D0\u05D7\u05E8\u05D5\u05E0\u05D4 \u05DC\u05D0 \u05D4\u05E6\u05DC\u05D9\u05D7\u05D4 \u05DC\u05E7\u05E8\u05D5\u05D0 \u05D0\u05D5\u05EA\u05D5 \u2014 \u05DC\u05D0 \u05E0\u05D1\u05D3\u05E7, \u05D4\u05EA\u05D9\u05D9\u05D7\u05E1 \u05D0\u05DC\u05D9\u05D5 \u05DB\u05E8\u05D2\u05D9\u05E9","your last scan could not read it \u2014 NOT checked, treat it as sensitive")}`}function gs(e,t,r){let n=[];if((e==="Bash"||e==="PowerShell")&&typeof t.command=="string"&&gc(t.command))return n;for(let s of ms(e,t,r)){if(!fc(s)||Ar(s)||!Sn(s))continue;let i=tt(s);if(!An(s)){let o=et(s);o?n.push({line:`${z(s)}: ${T("\u05E7\u05D5\u05D3 \u05E9\u05D4\u05E1\u05E8\u05D9\u05E7\u05D4 \u05D4\u05D0\u05D7\u05E8\u05D5\u05E0\u05D4 \u05E1\u05D9\u05DE\u05E0\u05D4","code your last scan flagged")} \u2014 ${mc(o)}`,kind:"flagged_code"}):i&&n.push({line:ss(s,i.changed),kind:"unread"});continue}try{if(yt(s).size>Qa)n.push({line:`${z(s)}: too large to check here (over 50 MB)`,kind:"too_large"});else{let o=pc(s);Object.keys(o).length?n.push({line:`${z(s)}: ${hs(o)}`,kind:"data_file"}):i&&!i.changed&&n.push({line:ss(s,!1),kind:"unread"})}}catch(o){n.push(o instanceof mt?{line:`${z(s)}: ${T("\u05DC\u05D0 \u05E0\u05D9\u05EA\u05DF \u05DC\u05E7\u05E8\u05D5\u05D0 \u05D0\u05EA \u05D4\u05D8\u05E7\u05E1\u05D8 (\u05E1\u05E8\u05D9\u05E7\u05D4, \u05D4\u05E6\u05E4\u05E0\u05D4 \u05D0\u05D5 \u05D2\u05D5\u05E4\u05DF \u05DC\u05D0 \u05E0\u05EA\u05DE\u05DA) \u2014 \u05DC\u05D0 \u05E0\u05D1\u05D3\u05E7, \u05D4\u05EA\u05D9\u05D9\u05D7\u05E1 \u05D0\u05DC\u05D9\u05D5 \u05DB\u05E8\u05D2\u05D9\u05E9","its text could not be read (a scan, encryption or an unsupported font) \u2014 NOT checked, treat it as sensitive")}`,kind:"unreadable"}:{line:`${z(s)}: could not be checked`,kind:"unreadable"})}}return n}var kn=/(?:\.aws[\\/]+credentials|\.npmrc|\.yarnrc\.yml|\.pypirc|[._]netrc|\.git-credentials|\.pgpass|\.docker[\\/]+config\.json|\.kube[\\/]+config|gh[\\/]+hosts\.yml|\.supabase[\\/]+access-token|application_default_credentials\.json|gcloud[\\/]+(?:credentials|access_tokens)\.db|\.azure[\\/]+(?:msal_token_cache|accessTokens)|com\.vercel\.cli[\\/]+auth\.json|\.ssh[\\/]+id_(?:rsa|ed25519|ecdsa|dsa)(?![\w.]))/i,gt=/(?:TOKEN|SECRET|PASSW(?:OR)?D|API_?KEY|PRIVATE_?KEY|ACCESS_?KEY|CREDENTIAL|SERVICE_ROLE|_KEY$)/i,ys="the vault's secrets, outside nodata_run's per-command approval",yc=/(?:^|[^\w.@-])(?:npx|pnpx|bunx|npm|pnpm|yarn|bun|node|nodejs|deno|nodata-mcp)(?:\.cmd|\.exe|\.ps1|\.js)?(?![\w-])[\s\S]*?(?<![\w-])secrets-(?:run|login|set|import|share)(?![\w-])/i;function bc(e){return yc.test(e)}var _c=[[/^(?:env|set|export\s+-p|declare\s+-x|get-childitem\s+env:\S*|gci\s+env:\S*|dir\s+env:\S*|ls\s+env:\S*)\s*$/i,"every environment variable"],[/^gh\s+auth\s+(?:token\b|status\b.*(?:\s-t\b|--show-token))/i,"the GitHub login token"],[/^gcloud\s+auth\s+(?:application-default\s+)?print-(?:access|identity)-token\b/i,"a Google Cloud access token"],[/^az\s+account\s+get-access-token\b/i,"an Azure access token"],[/^aws\s+(?:configure\s+(?:get\s+\S*(?:secret|token)\S*|export-credentials)|sts\s+get-session-token|ecr\s+get-login-password)\b/i,"AWS credentials"],[/^supabase\s+projects\s+api-keys\b/i,"the project's Supabase keys (incl. service_role)"],[/^heroku\s+auth:token\b/i,"the Heroku login token"],[/^op\s+(?:read|item\s+get)\b/i,"a 1Password secret"],[/^vault\s+(?:kv\s+get|read)\b/i,"a Vault secret"],[/^doppler\s+secrets\b/i,"Doppler secrets"],[/^security\s+find-(?:generic|internet)-password\b.*\s-w\b/i,"a keychain password"],[/^git\s+credential\s+fill\b/i,"a saved Git password"],[/^node\s+\S*nodata-pull\.mjs\b/i,ys],[/^kubectl\s+get\s+secrets?\b.*\s-o\b/i,"Kubernetes secrets"]],xc=/^(?:echo|printf|print|write-output|write-host|say)\b/i,bs=/^(?:cat|type|get-content|gc|more|less|head|tail|bat|nl|strings|xxd|od|hexdump|grep|egrep|rg|select-string|sls|awk|sed|jq|yq|python\d*|py|node|ruby|perl)\b/i,wc=/\$\{?env:([A-Za-z_][\w]*)|\$\{?([A-Za-z_][\w]*)|%([A-Za-z_][\w]*)%|GetEnvironmentVariable\(\s*['"]([^'"]+)['"]/g;function kc(e,t,r){let n=e==="Read"&&typeof t.file_path=="string"?t.file_path:e==="Grep"&&typeof t.path=="string"?t.path:"";if(n&&kn.test((te(n)?n:D(r,n)).replace(/\\/g,"/")))return`a saved login (${bt(n)})`;if(e!=="Bash"&&e!=="PowerShell"||typeof t.command!="string")return null;let s=t.command.split(/(\|\||&&|[;|\n])/);for(let i=0;i<s.length;i+=2){let o=s[i+1]==="|",a=s[i].trim().replace(/^(?:sudo\s+|cmd(?:\.exe)?\s+\/c\s+|powershell(?:\.exe)?\s+(?:-command\s+)?|pwsh\s+(?:-c(?:ommand)?\s+)?)+/i,"").replace(/^["']|["']$/g,"");if(bs.test(a)&&kn.test(a))return"a saved login file";if(bc(a))return ys;for(let[l,f]of _c)if(l.test(a))return f;let c=a.match(/^printenv(?:\s+(\S+))?\s*$/i);if(c&&(!c[1]||gt.test(c[1])))return c[1]?`the variable ${c[1]}`:"every environment variable";if(!o&&(xc.test(a)||/GetEnvironmentVariable/i.test(a)))for(let l of a.matchAll(wc)){let f=l[1]??l[2]??l[3]??l[4]??"";if(gt.test(f))return`the variable ${f}`}}return null}var _s=/^(?:grep|egrep|fgrep|rg|ag|ack|git\s+grep|findstr|select-string|sls)\b/i,vc=/(?:^|\s)(?:-[a-zA-Z]*[rR][a-zA-Z]*|--recursive|--dereference-recursive|\/s|-recurse)(?=\s|$)/i,Sc=new Set(["node_modules",".git",".next","dist","build",".venv","venv","__pycache__",".cache"]),is=4e3,Ec=5;function Ac(e){let t=0,r=0,n=(s,i)=>{if(i>Ec||t>is)return;let o;try{o=Ya(s,{withFileTypes:!0})}catch{return}for(let a of o){if(++t>is)return;let c=_e(s,a.name);a.isDirectory()?Sc.has(a.name)||n(c,i+1):(ge.test(a.name.toLowerCase())||kn.test(c.replace(/\\/g,"/"))||be(c))&&r++}};return n(e,0),r}var Pe=e=>{try{return yt(e).isDirectory()}catch{return!1}};function $c(e,t){let r=fs(D(t),D(e));return r===""||!r.startsWith("..")&&!te(r)}function Rc(e,t,r){let n=i=>D(r,i.replace(/^~(?=[\\/]|$)/,K())),s=[];if(e==="Grep"){let i=typeof t.path=="string"&&t.path?n(t.path):D(r);if(Pe(i)){let o=[t.pattern,t.glob,t.type].filter(a=>typeof a=="string").join(" ");s.push({roots:[i],bySecret:gt.test(o)||/\.env|env\b/i.test(String(t.glob??""))})}}else if((e==="Bash"||e==="PowerShell")&&typeof t.command=="string")for(let i of t.command.split(/\|\||&&|[;|\n]/)){let o=i.trim().replace(/^(?:sudo\s+|xargs\s+(?:-\S+\s+)*)/i,"");if(!/^find\b.*-exec\s+(?:grep|egrep|rg|cat)\b/i.test(o)&&!(_s.test(o)&&(vc.test(o)||/^(?:rg|ag|ack|git\s+grep)\b/i.test(o))))continue;let l=o.split(/\s+/).slice(1).map(f=>f.replace(/^['"]|['"]$/g,"")).filter(f=>f&&!f.startsWith("-")&&!/^\/[a-z]$/i.test(f)).map(n).filter(Pe);s.push({roots:l.length?l:[D(r)],bySecret:gt.test(o)||/\.env\b/i.test(o)})}for(let i of s)for(let o of i.roots){if(!i.bySecret&&$c(o,r))continue;let a=Ac(o);if(a>0)return{why:i.bySecret?"by_name":"outside",root:o,keyFiles:a}}return null}var xs=new Set(["Write","Edit","MultiEdit","NotebookEdit"]),ht=e=>xs.has(e)||ne(e)&&_t(e)==="write";function Rn(e,t,r){let n=s=>D(r,s.replace(/^~(?=[\\/]|$)/,K()));if(e==="Read"&&typeof t.file_path=="string")return{action:"read",paths:[n(t.file_path)],roots:[]};if(xs.has(e)){let s=typeof t.file_path=="string"?t.file_path:typeof t.notebook_path=="string"?t.notebook_path:"";return s?{action:"write",paths:[n(s)],roots:[]}:null}if(e==="Grep"||e==="Glob"){let s=typeof t.path=="string"&&t.path?n(t.path):D(r);return{action:"search",paths:[s],roots:Pe(s)?[s]:[]}}if(ne(e)){let s=Le(t,r);if(!s.length)return null;let i=_t(e);return{action:i,paths:s,roots:i==="search"?s.filter(Pe):[]}}if((e==="Bash"||e==="PowerShell")&&typeof t.command=="string"){let s=t.command,o=[...[...s.matchAll(/"([^"]*)"/g)].map(l=>l[1]),...[...s.matchAll(/'([^']*)'/g)].map(l=>l[1]),...s.split(/[\s|;&<>(),=`]+/)].map(l=>l.trim()).filter(l=>l&&!l.startsWith("-")&&/[\\/.~]/.test(l)).filter(l=>e==="PowerShell"||!/^\\+$/.test(l)).map(n).filter(l=>Sn(l)),a=s.split(/\|\||&&|[;|\n]/).some(l=>_s.test(l.trim())||/^find\b/i.test(l.trim())),c=o.filter(Pe);return{action:a?"search":bs.test(s.trim())?"read":"run",paths:[D(r),...o],roots:a?c.length?c:[D(r)]:[]}}return null}var Tc=/(browser|playwright|puppeteer|chrome|chromium|stagehand|browserbase|selenium|webdriver)/i,Ic=/(click|type|fill|press|select|submit|hover|drag|drop|upload|form|key|input|check|scroll|evaluate|dialog|tap|act\b|execute)/i,Cc=/^(url|uri|href|link|address|page_?url|start_?url)$/i,ws=()=>_e(K(),".nodata","gate-sites.json"),Pc=720*60*1e3,Lc=50;function Nc(e,t){let r,n,s=(i,o,a)=>{if(!(a>3||r)){if(typeof i=="string"){let c=i.trim();if(!/^https?:\/\//i.test(c)||c.length>4096)return;Cc.test(o)?r=c:n??=c}else if(Array.isArray(i))for(let c of i.slice(0,50))s(c,o,a+1);else if(i&&typeof i=="object")for(let[c,l]of Object.entries(i))s(l,c,a+1)}};return s(e,"",0),r??(t?n:void 0)}function Tn(e,t){if(e==="WebFetch")return typeof t.url=="string"?{action:"browse",url:t.url}:null;if(!ne(e)||$n(e))return null;let r=e.split("__").slice(2).join("__"),n=Tc.test(e),s=Nc(t,n);return!s&&!n?null:{action:Ic.test(r)?"interact":"browse",...s?{url:s}:{}}}function ks(){try{let e=JSON.parse(En(ws(),"utf8")),t=Date.now(),r={};for(let[n,s]of Object.entries(e??{}))typeof s?.host=="string"&&typeof s.at=="number"&&t-s.at<Pc&&(r[n]={host:s.host,at:s.at});return r}catch{return{}}}function Oc(e){return e?ks()[e]?.host:void 0}function Dc(e,t,r,n){if(!e||t==="WebFetch")return;let s=Tn(t,r);if(!s)return;let i="";try{i=typeof n=="string"?n:JSON.stringify(n??"")}catch{}let o=/Page URL:\s*(https?:\/\/[^\s"\\]+)/i.exec(i)?.[1]??/"(?:url|pageUrl|page_url)"\s*:\s*"(https?:\/\/[^"\\]+)"/i.exec(i)?.[1],a=on(o??s.url??"");if(a)try{let c=ks();c[e]={host:a,at:Date.now()};let l=Object.entries(c).sort((f,d)=>d[1].at-f[1].at).slice(0,Lc);ds(_e(K(),".nodata"),{recursive:!0}),Ja(ws(),JSON.stringify(Object.fromEntries(l))+`
50
+ `,{mode:384})}catch{}}function Fc(e,t,r,n=new Date,s,i){let o=Tn(e,t);if(!o)return null;let a;if(o.url){let y=on(o.url);if(!y)return null;a=y}else a=Oc(i);let{rules:c,tampered:l}=sn(),f=ln(),d={allow:0,ask:1,clean_copy:2,deny:3},h={action:o.action,path:"",now:n,who:s,site:a},p=ee(),g=null;for(let{owner:y,rules:m}of f){if(!at(y,D(r),p))continue;let x=cn(m,h);x&&(!g||d[x.rule.effect]>d[g.rule.effect])&&(g={...x,org:!0})}let u=null;if(l){let y=c.find(m=>m.site&&(a===void 0||an(m.site,a)));y&&(u={rule:{...y,effect:"deny",when:[]},n:c.indexOf(y)+1,touched:a??"",tampered:!0})}else u=cn(c,h);return g&&(!u||d[g.rule.effect]>=d[u.rule.effect])?g:u}function os(e,t,r,n=new Date,s){let i=Rn(e,t,r);if(!i)return null;let{rules:o,tampered:a}=sn(),c=ln();if(!o.length&&!c.length)return null;let l={allow:0,ask:1,clean_copy:2,deny:3},f=ee(),d=null;for(let{owner:p,rules:g}of c){for(let u of i.paths){if(!at(p,u,f))continue;let y=ft(g,{action:i.action,path:u,now:n,who:s});y&&(!d||l[y.rule.effect]>l[d.rule.effect])&&(d={...y,org:!0})}for(let u of i.roots){if(!at(p,u,f))continue;let y=pt(g,u,i.action,n,s);y&&y.rule.effect!=="allow"&&(!d||l[y.rule.effect]>l[d.rule.effect])&&(d={...y,org:!0})}}let h=Mc(o,a,i,n,l,s);return d&&(!h||l[d.rule.effect]>=l[h.rule.effect])?d:h}function Mc(e,t,r,n,s,i){if(!e.length)return null;if(t){for(let a of r.paths){let c=e.find(l=>de(l.path,a)||de(a,l.path));if(c)return{rule:{...c,effect:"deny",when:[]},n:e.indexOf(c)+1,touched:a,tampered:!0}}return null}let o=null;for(let a of r.paths){let c=ft(e,{action:r.action,path:a,now:n,who:i});c&&(!o||s[c.rule.effect]>s[o.rule.effect])&&(o=c)}for(let a of r.roots){let c=pt(e,a,r.action,n,i);c&&c.rule.effect!=="allow"&&(!o||s[c.rule.effect]>s[o.rule.effect])&&(o=c)}return o}function jc(e){let t;try{t=typeof e=="string"?e:JSON.stringify(e??"")}catch{return{}}if(!t)return{};t=t.slice(0,2*1024*1024);let r={};for(let n of Se()){let s=new RegExp(n.pattern.source,n.pattern.flags.includes("g")?n.pattern.flags:n.pattern.flags+"g"),i=(t.match(s)??[]).length;i&&(r[n.id]=(r[n.id]??0)+i)}return r}function Hc(e){let t=Object.keys(e);if(t.length===0)return null;let r=t.reduce((s,i)=>s+e[i],0),n=[...new Set(t.map(s=>{let i=Jt(s);return i.url?`${i.provider}: ${i.url}`:i.provider}))];return`NoData \xB7 A CREDENTIAL IS IN THIS OUTPUT (${r}: ${t.join(", ")}). It is now in this conversation and was sent to the AI model. Do not repeat, quote, shorten, mask-by-hand or reuse it \u2014 not in your answer, not in a command, not in a file. Tell the user in one line that a key was shown here and should be replaced at its provider (${n.join(" \xB7 ")}); nodata_scan_folder gives the full steps. Next time, run commands that need secrets through nodata_run: the output comes back with every value blanked.`+(Q()==="he"?" Answer the user in Hebrew.":"")}function Uc(e,t,r,n){let s=Vr();if(!s.length)return null;let i=Rn(e,t,r);if(!i)return null;let o=new Date,a=i.paths.map(l=>ft(s,{action:i.action,path:l,now:o,who:n})).find(Boolean)??i.roots.map(l=>pt(s,l,i.action,o,n)).find(Boolean);if(!a)return null;let c=String(a.rule.when?.[0]?.value??"");return T(`NoData \u05D7\u05E1\u05DD: ${z(a.rule.path)} \u05E2\u05D5\u05D1\u05D3\u05EA \u05E2\u05D1\u05D5\u05E8 \u05D0\u05E8\u05D2\u05D5\u05DF \u05D0\u05D7\u05E8 (${c}) \u05DE\u05D6\u05D4 \u05E9\u05DC \u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5. \u05E1\u05D5\u05DB\u05DF \u05E9\u05E2\u05D5\u05D1\u05D3 \u05DB\u05D0\u05DF \u05E2\u05D1\u05D5\u05E8 \u05D0\u05E8\u05D2\u05D5\u05DF \u05D0\u05D7\u05D3 \u05DC\u05D0 \u05E0\u05D5\u05D2\u05E2 \u05D1\u05E7\u05D1\u05E6\u05D9\u05DD \u05E9\u05DC \u05D0\u05E8\u05D2\u05D5\u05DF \u05D0\u05D7\u05E8 \u2014 \u05D2\u05DD \u05DC\u05D0 \u05D1\u05D0\u05D9\u05E9\u05D5\u05E8. \u05DC\u05E2\u05D1\u05D5\u05D3\u05D4 \u05E9\u05DD: \u05DC\u05E4\u05EA\u05D5\u05D7 \u05D0\u05EA \u05D4\u05E1\u05D5\u05DB\u05DF \u05D1\u05EA\u05D5\u05DA \u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D4\u05D9\u05D0.`,`NoData refused: ${z(a.rule.path)} works for another organisation (${c}) than this folder. An agent working here for one organisation does not touch another organisation's files \u2014 not even with approval. To work there, start the agent inside that folder.`)}function Bc(e,t,r){let n=(e==="Bash"||e==="PowerShell")&&typeof t.command=="string"?t.command:"",s=(e==="Grep"||e==="Glob")&&typeof t.path=="string"?t.path:e==="Read"&&typeof t.file_path=="string"?t.file_path:"";return n&&oc(n)||s&&be(te(s)?s:D(r,s))||ne(e)&&Le(t,r).some(be)||ms(e,t,r).some(be)?T("NoData \u05D7\u05E1\u05DD: \u05D6\u05D4 \u05E7\u05D5\u05D1\u05E5 \u05DE\u05E4\u05EA\u05D7 \u05E9\u05DC NoData (\u05DE\u05E4\u05EA\u05D7 \u05D4\u05DE\u05DB\u05E9\u05D9\u05E8, \u05D4\u05DB\u05E1\u05E4\u05EA \u05D0\u05D5 \u05D4\u05D0\u05E8\u05D2\u05D5\u05DF). \u05DE\u05D9 \u05E9\u05E7\u05D5\u05E8\u05D0 \u05D0\u05D5\u05EA\u05D5 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E4\u05EA\u05D5\u05D7 \u05DB\u05DC \u05E7\u05D5\u05D1\u05E5 \u05E0\u05E2\u05D5\u05DC, \u05D5\u05DC\u05DB\u05DF \u05D0\u05E3 \u05E1\u05D5\u05DB\u05DF \u05DC\u05D0 \u05E7\u05D5\u05E8\u05D0 \u05D0\u05D5\u05EA\u05D5 \u2014 \u05D2\u05DD \u05DC\u05D0 \u05D1\u05D0\u05D9\u05E9\u05D5\u05E8. \u05DC-NoData \u05D0\u05D9\u05DF \u05E2\u05D5\u05EA\u05E7 \u05E9\u05DC \u05D4\u05DE\u05E4\u05EA\u05D7 \u05D5\u05D0\u05D9\u05DF \u05D3\u05E8\u05DA \u05DC\u05E9\u05D7\u05D6\u05E8 \u05D0\u05D5\u05EA\u05D5: \u05D4\u05D2\u05D9\u05D1\u05D5\u05D9 \u05E9\u05DC\u05DA \u05D4\u05D5\u05D0 \u05D4\u05D3\u05E8\u05DA \u05D4\u05D9\u05D7\u05D9\u05D3\u05D4. \u05DC\u05D2\u05D9\u05D1\u05D5\u05D9, \u05D1\u05D8\u05E8\u05DE\u05D9\u05E0\u05DC \u05D5\u05DC\u05D0 \u05D1\u05E6'\u05D0\u05D8: npx -y @nodatachat/mcp@latest key-backup E: (E: = \u05D4\u05D3\u05D9\u05E1\u05E7-\u05D0\u05D5\u05DF-\u05E7\u05D9).","NoData refused: this is one of NoData's own key files (the device key, the vault login or the org credential). Whoever reads it can open every sealed file, so no agent reads it \u2014 not even with approval. NoData holds no copy of this key and cannot recover it: your backup is the only recovery. To back it up, in a terminal (not the chat): npx -y @nodatachat/mcp@latest key-backup E: (E: = your USB drive). Do not suggest other recovery routes \u2014 there are none."):null}var In="unreported",zc=new Set(["auto","bypassPermissions",In]),wn=e=>!!e&&zc.has(e);function ye(e){return e===In?T("\u05D4\u05E1\u05E9\u05DF \u05D4\u05D6\u05D4 \u05DC\u05D0 \u05DE\u05D3\u05D5\u05D5\u05D7 \u05D0\u05DD \u05D0\u05D3\u05DD \u05E2\u05D5\u05E0\u05D4 \u05D1\u05D5 \u05E2\u05DC \u05D1\u05E7\u05E9\u05EA \u05D0\u05D9\u05E9\u05D5\u05E8 (\u05DB\u05DA \u05D1-Claude Desktop \u05D5-Cowork), \u05D5\u05DC\u05DB\u05DF NoData \u05DC\u05D0 \u05E1\u05D5\u05DE\u05DB\u05EA \u05E2\u05DC \u05D7\u05DC\u05D5\u05DF \u05D4\u05D0\u05D9\u05E9\u05D5\u05E8 \u05E9\u05DC\u05D5","this session does not report whether a person answers its approval dialog (as in Claude Desktop and Cowork), so NoData does not rely on that dialog"):T(`\u05D4\u05E1\u05E9\u05DF \u05D4\u05D6\u05D4 \u05E8\u05E5 \u05D1\u05DE\u05E6\u05D1 ${e}, \u05E9\u05D1\u05D5 Claude Code \u05E2\u05D5\u05E0\u05D4 \u05D1\u05E2\u05E6\u05DE\u05D5 \u05E2\u05DC \u05D1\u05E7\u05E9\u05EA \u05D0\u05D9\u05E9\u05D5\u05E8`,`this session runs in ${e} mode, where Claude Code answers its own approval dialog`)}var vn=e=>e.charAt(0).toUpperCase()+e.slice(1);function as(e,t){let r=fs(t,e);return r&&!r.startsWith("..")&&!te(r)?z(r):bt(e)}function cs(e,t,r){if(!ht(t)||ne(t))return"";let n=Sn(e),s=r;if(n&&(t==="Edit"||t==="MultiEdit"))try{let o=yt(e).size<=1e6?En(e,"utf8"):null,a=t==="Edit"?[r]:Array.isArray(r.edits)?r.edits:[];for(let c of a)o!==null&&typeof c.old_string=="string"&&typeof c.new_string=="string"&&(o=c.replace_all?o.split(c.old_string).join(c.new_string):o.replace(c.old_string,()=>c.new_string));o!==null&&(s={content:o,old_string:r.old_string})}catch{}let i=es(e,s,Q()==="he"?"he":"en",n);return i?ts(i,Q()==="he"?"he":"en"):""}function ls(e,t,r,n,s,i,o=""){let a=o?`
51
+ ${o}`:"";if(!_n())return{decision:"deny",kind:"checkpoint",reason:T(`NoData: ${s}. ${ye(i)}, \u05D5\u05D4\u05DE\u05D7\u05E9\u05D1 \u05DC\u05D0 \u05DE\u05D7\u05D5\u05D1\u05E8 \u05DC-NoData \u05DB\u05D3\u05D9 \u05DC\u05E9\u05D0\u05D5\u05DC \u05D0\u05EA \u05D4\u05D1\u05E2\u05DC\u05D9\u05DD \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF. \u05DC\u05DB\u05DF \u05D4\u05E6\u05E2\u05D3 \u05E0\u05D7\u05E1\u05DD. \u05D0\u05E4\u05E9\u05E8 \u05DC\u05D7\u05D1\u05E8 \u05D0\u05EA \u05D4\u05DE\u05D7\u05E9\u05D1 (nodata_connect), \u05D0\u05D5 \u05E9\u05D4\u05D0\u05D3\u05DD \u05D9\u05E2\u05E9\u05D4 \u05D0\u05EA \u05D4\u05E6\u05E2\u05D3 \u05D1\u05E2\u05E6\u05DE\u05D5.`,`NoData: ${s}. ${vn(ye(i))}, and this computer is not connected to NoData to ask its owner in the browser. So the step is refused. Connect the computer (nodata_connect), or the person takes this step themselves.`)+a};let c=mn(e,t,r,n);return bn(c)?{decision:"allow"}:(yn({id:c,site:"",file:e,action:t,tool:r,what:gn(n),...o?{summary:o}:{}}),{decision:"deny",kind:"checkpoint",reason:T(`NoData: ${s}. ${ye(i)}, \u05D5\u05DC\u05DB\u05DF \u05D4\u05E6\u05E2\u05D3 \u05DE\u05D7\u05DB\u05D4 \u05DC\u05D0\u05D9\u05E9\u05D5\u05E8 \u05E9\u05DC \u05D1\u05E2\u05DC\u05D9 \u05D4\u05DE\u05D7\u05E9\u05D1 \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF.
52
+ \u05DB\u05D3\u05D9 \u05DC\u05D1\u05E7\u05E9: nodata_rules {action:"approve", checkpoint:"${c}"}. \u05D4\u05D5\u05D0 \u05E4\u05D5\u05EA\u05D7 \u05D0\u05EA \u05D3\u05E3 \u05D4\u05D0\u05D9\u05E9\u05D5\u05E8 \u05D5\u05DE\u05D7\u05DB\u05D4. \u05D0\u05D7\u05E8\u05D9 \u05D4\u05D0\u05D9\u05E9\u05D5\u05E8, \u05D7\u05D6\u05D5\u05E8 \u05E2\u05DC \u05D0\u05D5\u05EA\u05D4 \u05E7\u05E8\u05D9\u05D0\u05D4 \u05D1\u05D3\u05D9\u05D5\u05E7 (\u05E4\u05E2\u05DD \u05D0\u05D7\u05EA, \u05EA\u05D5\u05DA 5 \u05D3\u05E7\u05D5\u05EA). \u05D0\u05EA\u05D4 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05D0\u05E9\u05E8 \u05D1\u05E2\u05E6\u05DE\u05DA.`,`NoData: ${s}. ${vn(ye(i))}, so the step waits for the computer's owner to approve it in the browser.
53
+ To ask: nodata_rules {action:"approve", checkpoint:"${c}"}. It opens the approval page and waits. Once approved, repeat exactly the same call (once, within 5 minutes). You cannot approve it yourself.`)+a})}function Wc(e,t,r,n,s,i,o){if($n(e))return{decision:"allow"};let a=Hr(r),c={...s,org:a??void 0},l=Bc(e,t,r);if(l)return{decision:"deny",reason:l,kind:"nodata_key"};let f=Uc(e,t,r,c);if(f)return{decision:"deny",reason:f,kind:"org_wall"};let d=kc(e,t,r);if(d&&os(e,t,r,new Date,c)?.rule.effect!=="deny"){let b=T(`NoData: \u05D4\u05E4\u05E7\u05D5\u05D3\u05D4 \u05D4\u05D6\u05D5 \u05DE\u05E6\u05D9\u05D2\u05D4 ${d}. \u05DE\u05D4 \u05E9\u05D4\u05D9\u05D0 \u05DE\u05D3\u05E4\u05D9\u05E1\u05D4 \u05E0\u05DB\u05E0\u05E1 \u05DC\u05E9\u05D9\u05D7\u05D4 \u05D5\u05E0\u05E9\u05DC\u05D7 \u05DC\u05DE\u05D5\u05D3\u05DC \u05D4\u05D1\u05D9\u05E0\u05D4 \u05D4\u05DE\u05DC\u05D0\u05DB\u05D5\u05EA\u05D9\u05EA, \u05D5\u05DE\u05E4\u05EA\u05D7 \u05E9\u05E0\u05E8\u05D0\u05D4 \u05DB\u05D0\u05DF \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D7\u05DC\u05D9\u05E3.
48
54
  \u05D1\u05DE\u05E7\u05D5\u05DD \u05D6\u05D4: \u05DC\u05D4\u05E8\u05D9\u05E5 \u05D0\u05D5\u05EA\u05D4 \u05D1\u05E2\u05E6\u05DE\u05DA \u05D1\u05D8\u05E8\u05DE\u05D9\u05E0\u05DC (\u05DC\u05D0 \u05D1\u05E6'\u05D0\u05D8), \u05D0\u05D5 nodata_run \u2014 \u05E9\u05DE\u05E8\u05D9\u05E5 \u05E4\u05E7\u05D5\u05D3\u05D4 \u05E2\u05DD \u05D4\u05E1\u05D5\u05D3\u05D5\u05EA \u05D5\u05DE\u05D7\u05D6\u05D9\u05E8 \u05D0\u05EA \u05D4\u05E4\u05DC\u05D8 \u05DB\u05E9\u05DB\u05DC \u05E2\u05E8\u05DA \u05DE\u05D5\u05E1\u05EA\u05E8.`+(n?"":" \u05DC\u05D0\u05E9\u05E8 \u05D1\u05DB\u05DC \u05D6\u05D0\u05EA?"),`NoData: this shows ${d}. Whatever it prints enters the conversation and goes to the AI model, and a key seen there has to be replaced.
49
- Instead: run it yourself in a terminal (not the chat), or nodata_run \u2014 it runs a command with the secrets and returns the output with every value blanked.`+(n?"":" Allow anyway?"));return{decision:n?"deny":"ask",reason:S,kind:"credential_print"}}if((ut(e)||e==="Bash"||e==="PowerShell")&&Ua(e,t,r)){if(yn(o)){let S=typeof t.file_path=="string"?rs(q(t.file_path)?t.file_path:D(r,t.file_path),r):I("\u05D4\u05D4\u05D2\u05D3\u05E8\u05D5\u05EA \u05E9\u05DC Claude Code \u05D0\u05D5 \u05D4\u05E9\u05E2\u05E8 \u05E9\u05DC NoData","Claude Code's settings or NoData's gate");return is(S,"write",e,t,I("\u05D4\u05E4\u05E2\u05D5\u05DC\u05D4 \u05DE\u05E9\u05E0\u05D4 \u05D0\u05EA \u05DE\u05D4 \u05E9\u05DE\u05E4\u05E2\u05D9\u05DC \u05D0\u05EA \u05D4\u05E9\u05E2\u05E8","this changes what runs the gate"),o)}return{decision:"ask",kind:"gate_holder",reason:I("NoData: \u05D4\u05E4\u05E2\u05D5\u05DC\u05D4 \u05D4\u05D6\u05D5 \u05DE\u05E9\u05E0\u05D4 \u05D0\u05EA \u05DE\u05D4 \u05E9\u05DE\u05E4\u05E2\u05D9\u05DC \u05D0\u05EA \u05D4\u05E9\u05E2\u05E8 \u2014 \u05D4\u05D4\u05D2\u05D3\u05E8\u05D5\u05EA \u05E9\u05DC Claude Code \u05D0\u05D5 \u05D4\u05E7\u05D5\u05D3 \u05D4\u05DE\u05D5\u05EA\u05E7\u05DF \u05E9\u05DC NoData. \u05D0\u05D7\u05E8\u05D9 \u05E9\u05D9\u05E0\u05D5\u05D9 \u05DB\u05D6\u05D4 \u05D9\u05D9\u05EA\u05DB\u05DF \u05E9\u05D4\u05E9\u05E2\u05E8 \u05DC\u05D0 \u05D9\u05D1\u05D3\u05D5\u05E7 \u05D9\u05D5\u05EA\u05E8. \u05DC\u05D0\u05E9\u05E8 \u05E8\u05E7 \u05D0\u05DD \u05D0\u05EA\u05D4 \u05D1\u05D9\u05E7\u05E9\u05EA \u05D0\u05EA \u05D6\u05D4.","NoData: this changes what runs the gate \u2014 Claude Code's settings or NoData's installed code. After such a change the gate may stop checking. Approve only if you asked for it.")}}if(ut(e)){let S=typeof t.file_path=="string"?t.file_path:typeof t.notebook_path=="string"?t.notebook_path:"";if((Q(e)?Pe(t,r):S?[q(S)?S:D(r,S)]:[]).some(be))return{decision:"deny",kind:"nodata_write",reason:I("NoData \u05D7\u05E1\u05DD: \u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 ~/.nodata \u05E1\u05D2\u05D5\u05E8\u05D4 \u05DC\u05E1\u05D5\u05DB\u05E0\u05D9\u05DD, \u05D2\u05DD \u05DC\u05DB\u05EA\u05D9\u05D1\u05D4 (\u05DB\u05DC\u05DC\u05D9\u05DD, \u05DE\u05E4\u05EA\u05D7\u05D5\u05EA, \u05D0\u05D9\u05E9\u05D5\u05E8\u05D9\u05DD).","NoData refused: ~/.nodata is closed to agents, writes included (rules, keys, approvals).")}}let m=new Date,f=ns(e,t,r,m,c),g=pc(e,t,r,m,c,i),u=g&&(!f||oe[g.rule.effect]>oe[f.rule.effect])?g:f;if(u&&u.rule.effect!=="allow"){let S=Y()==="he",j=u.rule.site?Hr(u.rule,S):u.rule.path.startsWith("**/")?u.rule.path:B(u.rule.path),W=u.rule.site&&!u.touched?I(" (NoData \u05DC\u05D0 \u05D9\u05D5\u05D3\u05E2 \u05D1\u05D0\u05D9\u05D6\u05D4 \u05D0\u05EA\u05E8 \u05D4\u05D3\u05E3 \u05D4\u05D6\u05D4, \u05D5\u05DC\u05DB\u05DF \u05D4\u05DB\u05DC\u05DC \u05D4\u05DE\u05D7\u05DE\u05D9\u05E8 \u05DE\u05D1\u05D9\u05DF \u05DB\u05DC\u05DC\u05D9 \u05D4\u05D0\u05EA\u05E8\u05D9\u05DD \u05D7\u05DC)"," (NoData does not know which site this page is on, so the strictest site rule applies)"):"",P=u.tampered?I("\u05E7\u05D5\u05D1\u05E5 \u05D4\u05DB\u05DC\u05DC\u05D9\u05DD \u05E9\u05D5\u05E0\u05D4 \u05E9\u05DC\u05D0 \u05D3\u05E8\u05DA nodata_rules, \u05D5\u05DC\u05DB\u05DF \u05DB\u05DC \u05E0\u05EA\u05D9\u05D1 \u05D5\u05D0\u05EA\u05E8 \u05E9\u05D4\u05D5\u05D0 \u05DE\u05D6\u05DB\u05D9\u05E8 \u05E1\u05D2\u05D5\u05E8\u05D9\u05DD \u05E2\u05D3 \u05E9\u05EA\u05E9\u05DE\u05D5\u05E8 \u05D0\u05EA \u05D4\u05DB\u05DC\u05DC\u05D9\u05DD \u05DE\u05D7\u05D3\u05E9.","the rules file was changed outside nodata_rules, so every path and site it names is closed until you save the rules again."):`${u.org?I("\u05DB\u05DC\u05DC \u05E9\u05DC \u05D4\u05D0\u05E8\u05D2\u05D5\u05DF","organisation rule"):I("\u05DB\u05DC\u05DC","rule")} ${u.n}: ${j} \u2192 ${Ur(u.rule.effect,S)}${u.rule.note?` (${u.rule.note})`:""}${W}`;if(u.rule.site&&u.rule.effect==="ask"&&!u.tampered&&mn()){let L=En(e,t),M=u.touched,H=un(M,L.action,e,t);return hn(H)?{decision:"allow"}:(pn({id:H,site:M,action:L.action,tool:e,what:fn(t)}),{decision:"deny",kind:"checkpoint",reason:I(`NoData: ${P}. \u05D4\u05E6\u05E2\u05D3 \u05D4\u05D6\u05D4 \u05DE\u05D7\u05DB\u05D4 \u05DC\u05D0\u05D9\u05E9\u05D5\u05E8 \u05E9\u05DC \u05D1\u05E2\u05DC\u05D9 \u05D4\u05DE\u05D7\u05E9\u05D1 \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF, \u05DC\u05D0 \u05DC\u05D0\u05D9\u05E9\u05D5\u05E8 \u05DB\u05D0\u05DF.
50
- \u05DB\u05D3\u05D9 \u05DC\u05D1\u05E7\u05E9: nodata_rules {action:"approve", checkpoint:"${H}"} \u2014 \u05D4\u05D5\u05D0 \u05E4\u05D5\u05EA\u05D7 \u05D0\u05EA \u05D3\u05E3 \u05D4\u05D0\u05D9\u05E9\u05D5\u05E8 \u05D5\u05DE\u05D7\u05DB\u05D4. \u05D0\u05D7\u05E8\u05D9 \u05D4\u05D0\u05D9\u05E9\u05D5\u05E8, \u05D7\u05D6\u05D5\u05E8 \u05E2\u05DC \u05D0\u05D5\u05EA\u05D4 \u05E7\u05E8\u05D9\u05D0\u05D4 \u05D1\u05D3\u05D9\u05D5\u05E7 (\u05E4\u05E2\u05DD \u05D0\u05D7\u05EA, \u05EA\u05D5\u05DA 5 \u05D3\u05E7\u05D5\u05EA). \u05D0\u05EA\u05D4 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05D0\u05E9\u05E8 \u05D1\u05E2\u05E6\u05DE\u05DA.`,`NoData: ${P}. This step waits for the computer's owner to approve it in the browser, not here.
51
- To ask: nodata_rules {action:"approve", checkpoint:"${H}"} \u2014 it opens the approval page and waits. Once approved, repeat exactly the same call (once, within 5 minutes). You cannot approve it yourself.`)})}if(u.rule.site&&u.rule.effect==="ask"&&!u.tampered&&yn(o))return{decision:"deny",kind:"checkpoint",reason:I(`NoData: ${P}. ${ye(o)}, \u05D5\u05D4\u05DE\u05D7\u05E9\u05D1 \u05DC\u05D0 \u05DE\u05D7\u05D5\u05D1\u05E8 \u05DC-NoData \u05DB\u05D3\u05D9 \u05DC\u05E9\u05D0\u05D5\u05DC \u05D0\u05EA \u05D4\u05D1\u05E2\u05DC\u05D9\u05DD \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF. \u05DC\u05DB\u05DF \u05D4\u05E6\u05E2\u05D3 \u05E0\u05D7\u05E1\u05DD. \u05D0\u05E4\u05E9\u05E8 \u05DC\u05D7\u05D1\u05E8 \u05D0\u05EA \u05D4\u05DE\u05D7\u05E9\u05D1 (nodata_connect), \u05D0\u05D5 \u05E9\u05D4\u05D0\u05D3\u05DD \u05D9\u05E2\u05E9\u05D4 \u05D0\u05EA \u05D4\u05E6\u05E2\u05D3 \u05D1\u05E2\u05E6\u05DE\u05D5.`,`NoData: ${P}. ${_n(ye(o))}, and this computer is not connected to NoData to ask its owner in the browser. So the step is refused. Connect the computer (nodata_connect), or the person takes this step themselves.`)};if(!u.rule.site&&u.rule.effect==="ask"&&!u.tampered&&yn(o)){let L=Sn(e,t,r)?.action,M=L==="read"||L==="search"||L==="run"?L:"write";return is(rs(u.touched,r),M,e,t,P,o,ss(u.touched,e,t))}let V=u.rule.effect==="ask"?ss(u.touched,e,t):"",N=u.rule.effect==="clean_copy"?I(`NoData: ${P}. \u05D4\u05E1\u05D5\u05DB\u05DF \u05E2\u05D5\u05D1\u05D3 \u05DB\u05D0\u05DF \u05E8\u05E7 \u05E2\u05DC \u05E2\u05D5\u05EA\u05E7 \u05E0\u05E7\u05D9: nodata_redact \u05D9\u05D5\u05E6\u05E8 \u05D0\u05D5\u05EA\u05D5 (\u05DE\u05D6\u05D4\u05D9\u05DD \u05DE\u05D5\u05D7\u05DC\u05E4\u05D9\u05DD, \u05E0\u05D1\u05D3\u05E7 \u05DC\u05E4\u05E0\u05D9 \u05E9\u05D9\u05DE\u05D5\u05E9).`,`NoData: ${P}. The agent works here on a clean copy only: nodata_redact makes one (identifiers replaced, checked before use).`):u.rule.effect==="ask"?I(`NoData: ${P}. \u05DC\u05D0\u05E9\u05E8?`,`NoData: ${P}. Allow?`)+(V?`
52
- ${V}`:""):I(`NoData: ${P}. \u05D4\u05DB\u05DC\u05DC\u05D9\u05DD \u05E9\u05DC \u05D4\u05E7\u05D1\u05E6\u05D9\u05DD, \u05D4\u05EA\u05D9\u05E7\u05D9\u05D5\u05EA \u05D5\u05D4\u05D0\u05EA\u05E8\u05D9\u05DD \u05E9\u05DC\u05DA: nodata_rules.`,`NoData: ${P}. Your file, folder and site rules: nodata_rules.`);return{decision:u.rule.effect==="ask"?"ask":"deny",reason:N,kind:"rule"}}if(ut(e))return{decision:"allow"};let y=sc(e,t,r);if(y){let S=B(y.root),j=I(`NoData: \u05D6\u05D4 ${y.why==="by_name"?"\u05D7\u05D9\u05E4\u05D5\u05E9 \u05E1\u05D5\u05D3 \u05DC\u05E4\u05D9 \u05E9\u05DD":"\u05D7\u05D9\u05E4\u05D5\u05E9 \u05DE\u05D7\u05D5\u05E5 \u05DC\u05E4\u05E8\u05D5\u05D9\u05E7\u05D8"}, \u05D1\u05EA\u05D5\u05DA ${S}, \u05E9\u05D9\u05E9 \u05D1\u05D4 ${y.keyFiles} \u05E7\u05D1\u05E6\u05D9 \u05DE\u05E4\u05EA\u05D7\u05D5\u05EA (.env, \u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05D9\u05D5\u05EA). \u05DE\u05D4 \u05E9\u05D4\u05D7\u05D9\u05E4\u05D5\u05E9 \u05D9\u05DE\u05E6\u05D0 \u05E0\u05DB\u05E0\u05E1 \u05DC\u05E9\u05D9\u05D7\u05D4, \u05D5\u05DE\u05E4\u05EA\u05D7 \u05E9\u05E0\u05DE\u05E6\u05D0 \u05DB\u05DA \u05D9\u05DB\u05D5\u05DC \u05DC\u05E9\u05DE\u05E9 \u05D0\u05EA \u05D4\u05E1\u05D5\u05DB\u05DF \u2014 \u05D2\u05DD \u05DC\u05E4\u05E2\u05D5\u05DC\u05D5\u05EA \u05E9\u05E2\u05D5\u05DC\u05D5\u05EA \u05DB\u05E1\u05E3 \u2014 \u05D1\u05DC\u05D9 \u05E9\u05D0\u05D9\u05E9\u05E8\u05EA \u05D0\u05D5\u05EA\u05D5.
53
- \u05D1\u05DE\u05E7\u05D5\u05DD \u05D6\u05D4: \u05DC\u05D7\u05E4\u05E9 \u05D1\u05EA\u05D5\u05DA \u05D4\u05E4\u05E8\u05D5\u05D9\u05E7\u05D8, \u05D0\u05D5 nodata_run \u05E2\u05DD \u05D4\u05DE\u05E4\u05EA\u05D7\u05D5\u05EA \u05DE\u05D4\u05DB\u05E1\u05E4\u05EA (\u05DB\u05DC \u05E4\u05E7\u05D5\u05D3\u05D4 \u05DE\u05D0\u05D5\u05E9\u05E8\u05EA \u05DB\u05DE\u05D5 \u05E9\u05D4\u05D9\u05D0).`+(n?"":" \u05DC\u05D0\u05E9\u05E8 \u05D1\u05DB\u05DC \u05D6\u05D0\u05EA?"),`NoData: this is ${y.why==="by_name"?"a search for a secret by name":"a search outside this project"}, over ${S}, where ${y.keyFiles} key file(s) (.env, logins) are. Whatever it finds enters the conversation, and a key found this way can be used by the agent \u2014 for paid calls too \u2014 without you approving it.
54
- Instead: search inside the project, or nodata_run with the keys from the vault (each command approved as written).`+(n?"":" Allow anyway?"));return{decision:n?"deny":"ask",reason:j,kind:"secret_search"}}if(u?.rule.effect==="allow")return{decision:"allow"};let h=fs(e,t,r);if(h.length===0)return{decision:"allow"};let x=h.map(S=>S.line),b=I(`NoData \u05E1\u05E8\u05E7 \u05D0\u05EA \u05D4\u05E7\u05D5\u05D1\u05E5 \u05D1\u05DE\u05D7\u05E9\u05D1 \u05E9\u05DC\u05DA \u2014 \u05E9\u05D5\u05DD \u05D3\u05D1\u05E8 \u05DC\u05D0 \u05D9\u05E6\u05D0:
55
+ Instead: run it yourself in a terminal (not the chat), or nodata_run \u2014 it runs a command with the secrets and returns the output with every value blanked.`+(n?"":" Allow anyway?"));return{decision:n?"deny":"ask",reason:b,kind:"credential_print"}}if((ht(e)||e==="Bash"||e==="PowerShell")&&uc(e,t,r)){if(wn(o)){let b=typeof t.file_path=="string"?as(te(t.file_path)?t.file_path:D(r,t.file_path),r):T("\u05D4\u05D4\u05D2\u05D3\u05E8\u05D5\u05EA \u05E9\u05DC Claude Code \u05D0\u05D5 \u05D4\u05E9\u05E2\u05E8 \u05E9\u05DC NoData","Claude Code's settings or NoData's gate");return ls(b,"write",e,t,T("\u05D4\u05E4\u05E2\u05D5\u05DC\u05D4 \u05DE\u05E9\u05E0\u05D4 \u05D0\u05EA \u05DE\u05D4 \u05E9\u05DE\u05E4\u05E2\u05D9\u05DC \u05D0\u05EA \u05D4\u05E9\u05E2\u05E8","this changes what runs the gate"),o)}return{decision:"ask",kind:"gate_holder",reason:T("NoData: \u05D4\u05E4\u05E2\u05D5\u05DC\u05D4 \u05D4\u05D6\u05D5 \u05DE\u05E9\u05E0\u05D4 \u05D0\u05EA \u05DE\u05D4 \u05E9\u05DE\u05E4\u05E2\u05D9\u05DC \u05D0\u05EA \u05D4\u05E9\u05E2\u05E8 \u2014 \u05D4\u05D4\u05D2\u05D3\u05E8\u05D5\u05EA \u05E9\u05DC Claude Code \u05D0\u05D5 \u05D4\u05E7\u05D5\u05D3 \u05D4\u05DE\u05D5\u05EA\u05E7\u05DF \u05E9\u05DC NoData. \u05D0\u05D7\u05E8\u05D9 \u05E9\u05D9\u05E0\u05D5\u05D9 \u05DB\u05D6\u05D4 \u05D9\u05D9\u05EA\u05DB\u05DF \u05E9\u05D4\u05E9\u05E2\u05E8 \u05DC\u05D0 \u05D9\u05D1\u05D3\u05D5\u05E7 \u05D9\u05D5\u05EA\u05E8. \u05DC\u05D0\u05E9\u05E8 \u05E8\u05E7 \u05D0\u05DD \u05D0\u05EA\u05D4 \u05D1\u05D9\u05E7\u05E9\u05EA \u05D0\u05EA \u05D6\u05D4.","NoData: this changes what runs the gate \u2014 Claude Code's settings or NoData's installed code. After such a change the gate may stop checking. Approve only if you asked for it.")}}if(ht(e)){let b=typeof t.file_path=="string"?t.file_path:typeof t.notebook_path=="string"?t.notebook_path:"";if((ne(e)?Le(t,r):b?[te(b)?b:D(r,b)]:[]).some(be))return{decision:"deny",kind:"nodata_write",reason:T("NoData \u05D7\u05E1\u05DD: \u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 ~/.nodata \u05E1\u05D2\u05D5\u05E8\u05D4 \u05DC\u05E1\u05D5\u05DB\u05E0\u05D9\u05DD, \u05D2\u05DD \u05DC\u05DB\u05EA\u05D9\u05D1\u05D4 (\u05DB\u05DC\u05DC\u05D9\u05DD, \u05DE\u05E4\u05EA\u05D7\u05D5\u05EA, \u05D0\u05D9\u05E9\u05D5\u05E8\u05D9\u05DD).","NoData refused: ~/.nodata is closed to agents, writes included (rules, keys, approvals).")}}let h=new Date,p=os(e,t,r,h,c),g=Fc(e,t,r,h,c,i),u=g&&(!p||le[g.rule.effect]>le[p.rule.effect])?g:p;if(u&&u.rule.effect!=="allow"){let b=Q()==="he",F=u.rule.site?Wr(u.rule,b):u.rule.path.startsWith("**/")?u.rule.path:z(u.rule.path),H=u.rule.site&&!u.touched?T(" (NoData \u05DC\u05D0 \u05D9\u05D5\u05D3\u05E2 \u05D1\u05D0\u05D9\u05D6\u05D4 \u05D0\u05EA\u05E8 \u05D4\u05D3\u05E3 \u05D4\u05D6\u05D4, \u05D5\u05DC\u05DB\u05DF \u05D4\u05DB\u05DC\u05DC \u05D4\u05DE\u05D7\u05DE\u05D9\u05E8 \u05DE\u05D1\u05D9\u05DF \u05DB\u05DC\u05DC\u05D9 \u05D4\u05D0\u05EA\u05E8\u05D9\u05DD \u05D7\u05DC)"," (NoData does not know which site this page is on, so the strictest site rule applies)"):"",P=u.tampered?T("\u05E7\u05D5\u05D1\u05E5 \u05D4\u05DB\u05DC\u05DC\u05D9\u05DD \u05E9\u05D5\u05E0\u05D4 \u05E9\u05DC\u05D0 \u05D3\u05E8\u05DA nodata_rules, \u05D5\u05DC\u05DB\u05DF \u05DB\u05DC \u05E0\u05EA\u05D9\u05D1 \u05D5\u05D0\u05EA\u05E8 \u05E9\u05D4\u05D5\u05D0 \u05DE\u05D6\u05DB\u05D9\u05E8 \u05E1\u05D2\u05D5\u05E8\u05D9\u05DD \u05E2\u05D3 \u05E9\u05EA\u05E9\u05DE\u05D5\u05E8 \u05D0\u05EA \u05D4\u05DB\u05DC\u05DC\u05D9\u05DD \u05DE\u05D7\u05D3\u05E9.","the rules file was changed outside nodata_rules, so every path and site it names is closed until you save the rules again."):`${u.org?T("\u05DB\u05DC\u05DC \u05E9\u05DC \u05D4\u05D0\u05E8\u05D2\u05D5\u05DF","organisation rule"):T("\u05DB\u05DC\u05DC","rule")} ${u.n}: ${F} \u2192 ${Gr(u.rule.effect,b)}${u.rule.note?` (${u.rule.note})`:""}${H}`;if(u.rule.site&&u.rule.effect==="ask"&&!u.tampered&&_n()){let L=Tn(e,t),j=u.touched,U=mn(j,L.action,e,t);return bn(U)?{decision:"allow"}:(yn({id:U,site:j,action:L.action,tool:e,what:gn(t)}),{decision:"deny",kind:"checkpoint",reason:T(`NoData: ${P}. \u05D4\u05E6\u05E2\u05D3 \u05D4\u05D6\u05D4 \u05DE\u05D7\u05DB\u05D4 \u05DC\u05D0\u05D9\u05E9\u05D5\u05E8 \u05E9\u05DC \u05D1\u05E2\u05DC\u05D9 \u05D4\u05DE\u05D7\u05E9\u05D1 \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF, \u05DC\u05D0 \u05DC\u05D0\u05D9\u05E9\u05D5\u05E8 \u05DB\u05D0\u05DF.
56
+ \u05DB\u05D3\u05D9 \u05DC\u05D1\u05E7\u05E9: nodata_rules {action:"approve", checkpoint:"${U}"} \u2014 \u05D4\u05D5\u05D0 \u05E4\u05D5\u05EA\u05D7 \u05D0\u05EA \u05D3\u05E3 \u05D4\u05D0\u05D9\u05E9\u05D5\u05E8 \u05D5\u05DE\u05D7\u05DB\u05D4. \u05D0\u05D7\u05E8\u05D9 \u05D4\u05D0\u05D9\u05E9\u05D5\u05E8, \u05D7\u05D6\u05D5\u05E8 \u05E2\u05DC \u05D0\u05D5\u05EA\u05D4 \u05E7\u05E8\u05D9\u05D0\u05D4 \u05D1\u05D3\u05D9\u05D5\u05E7 (\u05E4\u05E2\u05DD \u05D0\u05D7\u05EA, \u05EA\u05D5\u05DA 5 \u05D3\u05E7\u05D5\u05EA). \u05D0\u05EA\u05D4 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05D0\u05E9\u05E8 \u05D1\u05E2\u05E6\u05DE\u05DA.`,`NoData: ${P}. This step waits for the computer's owner to approve it in the browser, not here.
57
+ To ask: nodata_rules {action:"approve", checkpoint:"${U}"} \u2014 it opens the approval page and waits. Once approved, repeat exactly the same call (once, within 5 minutes). You cannot approve it yourself.`)})}if(u.rule.site&&u.rule.effect==="ask"&&!u.tampered&&wn(o))return{decision:"deny",kind:"checkpoint",reason:T(`NoData: ${P}. ${ye(o)}, \u05D5\u05D4\u05DE\u05D7\u05E9\u05D1 \u05DC\u05D0 \u05DE\u05D7\u05D5\u05D1\u05E8 \u05DC-NoData \u05DB\u05D3\u05D9 \u05DC\u05E9\u05D0\u05D5\u05DC \u05D0\u05EA \u05D4\u05D1\u05E2\u05DC\u05D9\u05DD \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF. \u05DC\u05DB\u05DF \u05D4\u05E6\u05E2\u05D3 \u05E0\u05D7\u05E1\u05DD. \u05D0\u05E4\u05E9\u05E8 \u05DC\u05D7\u05D1\u05E8 \u05D0\u05EA \u05D4\u05DE\u05D7\u05E9\u05D1 (nodata_connect), \u05D0\u05D5 \u05E9\u05D4\u05D0\u05D3\u05DD \u05D9\u05E2\u05E9\u05D4 \u05D0\u05EA \u05D4\u05E6\u05E2\u05D3 \u05D1\u05E2\u05E6\u05DE\u05D5.`,`NoData: ${P}. ${vn(ye(o))}, and this computer is not connected to NoData to ask its owner in the browser. So the step is refused. Connect the computer (nodata_connect), or the person takes this step themselves.`)};if(!u.rule.site&&u.rule.effect==="ask"&&!u.tampered&&wn(o)){let L=Rn(e,t,r)?.action,j=L==="read"||L==="search"||L==="run"?L:"write";return ls(as(u.touched,r),j,e,t,P,o,cs(u.touched,e,t))}let X=u.rule.effect==="ask"?cs(u.touched,e,t):"",N=u.rule.effect==="clean_copy"?T(`NoData: ${P}. \u05D4\u05E1\u05D5\u05DB\u05DF \u05E2\u05D5\u05D1\u05D3 \u05DB\u05D0\u05DF \u05E8\u05E7 \u05E2\u05DC \u05E2\u05D5\u05EA\u05E7 \u05E0\u05E7\u05D9: nodata_redact \u05D9\u05D5\u05E6\u05E8 \u05D0\u05D5\u05EA\u05D5 (\u05DE\u05D6\u05D4\u05D9\u05DD \u05DE\u05D5\u05D7\u05DC\u05E4\u05D9\u05DD, \u05E0\u05D1\u05D3\u05E7 \u05DC\u05E4\u05E0\u05D9 \u05E9\u05D9\u05DE\u05D5\u05E9).`,`NoData: ${P}. The agent works here on a clean copy only: nodata_redact makes one (identifiers replaced, checked before use).`):u.rule.effect==="ask"?T(`NoData: ${P}. \u05DC\u05D0\u05E9\u05E8?`,`NoData: ${P}. Allow?`)+(X?`
58
+ ${X}`:""):T(`NoData: ${P}. \u05D4\u05DB\u05DC\u05DC\u05D9\u05DD \u05E9\u05DC \u05D4\u05E7\u05D1\u05E6\u05D9\u05DD, \u05D4\u05EA\u05D9\u05E7\u05D9\u05D5\u05EA \u05D5\u05D4\u05D0\u05EA\u05E8\u05D9\u05DD \u05E9\u05DC\u05DA: nodata_rules.`,`NoData: ${P}. Your file, folder and site rules: nodata_rules.`);return{decision:u.rule.effect==="ask"?"ask":"deny",reason:N,kind:"rule"}}if(ht(e))return{decision:"allow"};let y=Rc(e,t,r);if(y){let b=z(y.root),F=T(`NoData: \u05D6\u05D4 ${y.why==="by_name"?"\u05D7\u05D9\u05E4\u05D5\u05E9 \u05E1\u05D5\u05D3 \u05DC\u05E4\u05D9 \u05E9\u05DD":"\u05D7\u05D9\u05E4\u05D5\u05E9 \u05DE\u05D7\u05D5\u05E5 \u05DC\u05E4\u05E8\u05D5\u05D9\u05E7\u05D8"}, \u05D1\u05EA\u05D5\u05DA ${b}, \u05E9\u05D9\u05E9 \u05D1\u05D4 ${y.keyFiles} \u05E7\u05D1\u05E6\u05D9 \u05DE\u05E4\u05EA\u05D7\u05D5\u05EA (.env, \u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05D9\u05D5\u05EA). \u05DE\u05D4 \u05E9\u05D4\u05D7\u05D9\u05E4\u05D5\u05E9 \u05D9\u05DE\u05E6\u05D0 \u05E0\u05DB\u05E0\u05E1 \u05DC\u05E9\u05D9\u05D7\u05D4, \u05D5\u05DE\u05E4\u05EA\u05D7 \u05E9\u05E0\u05DE\u05E6\u05D0 \u05DB\u05DA \u05D9\u05DB\u05D5\u05DC \u05DC\u05E9\u05DE\u05E9 \u05D0\u05EA \u05D4\u05E1\u05D5\u05DB\u05DF \u2014 \u05D2\u05DD \u05DC\u05E4\u05E2\u05D5\u05DC\u05D5\u05EA \u05E9\u05E2\u05D5\u05DC\u05D5\u05EA \u05DB\u05E1\u05E3 \u2014 \u05D1\u05DC\u05D9 \u05E9\u05D0\u05D9\u05E9\u05E8\u05EA \u05D0\u05D5\u05EA\u05D5.
59
+ \u05D1\u05DE\u05E7\u05D5\u05DD \u05D6\u05D4: \u05DC\u05D7\u05E4\u05E9 \u05D1\u05EA\u05D5\u05DA \u05D4\u05E4\u05E8\u05D5\u05D9\u05E7\u05D8, \u05D0\u05D5 nodata_run \u05E2\u05DD \u05D4\u05DE\u05E4\u05EA\u05D7\u05D5\u05EA \u05DE\u05D4\u05DB\u05E1\u05E4\u05EA (\u05DB\u05DC \u05E4\u05E7\u05D5\u05D3\u05D4 \u05DE\u05D0\u05D5\u05E9\u05E8\u05EA \u05DB\u05DE\u05D5 \u05E9\u05D4\u05D9\u05D0).`+(n?"":" \u05DC\u05D0\u05E9\u05E8 \u05D1\u05DB\u05DC \u05D6\u05D0\u05EA?"),`NoData: this is ${y.why==="by_name"?"a search for a secret by name":"a search outside this project"}, over ${b}, where ${y.keyFiles} key file(s) (.env, logins) are. Whatever it finds enters the conversation, and a key found this way can be used by the agent \u2014 for paid calls too \u2014 without you approving it.
60
+ Instead: search inside the project, or nodata_run with the keys from the vault (each command approved as written).`+(n?"":" Allow anyway?"));return{decision:n?"deny":"ask",reason:F,kind:"secret_search"}}if(u?.rule.effect==="allow")return{decision:"allow"};let m=gs(e,t,r);if(m.length===0)return{decision:"allow"};let x=m.map(b=>b.line),_=T(`NoData \u05E1\u05E8\u05E7 \u05D0\u05EA \u05D4\u05E7\u05D5\u05D1\u05E5 \u05D1\u05DE\u05D7\u05E9\u05D1 \u05E9\u05DC\u05DA \u2014 \u05E9\u05D5\u05DD \u05D3\u05D1\u05E8 \u05DC\u05D0 \u05D9\u05E6\u05D0:
55
61
  ${x.join(`
56
62
  `)}
57
63
  `+(n?"\u05D4\u05E7\u05E8\u05D9\u05D0\u05D4 \u05E0\u05D7\u05E1\u05DE\u05D4: Claude \u05DC\u05D0 \u05D9\u05E7\u05E8\u05D0 \u05D0\u05EA \u05D4\u05DE\u05E7\u05D5\u05E8. \u05D1\u05DE\u05E7\u05D5\u05DD \u05D6\u05D4: nodata_redact (\u05E2\u05D5\u05EA\u05E7 \u05E0\u05E7\u05D9 \u05DC\u05E2\u05D1\u05D5\u05D3\u05D4) \u05D0\u05D5 nodata_protect (\u05E0\u05E2\u05D9\u05DC\u05D4).":"\u05D0\u05DD \u05EA\u05D0\u05E9\u05E8, Claude \u05D9\u05E7\u05E8\u05D0 \u05D0\u05EA \u05D4\u05E7\u05D5\u05D1\u05E5 \u05E2\u05E6\u05DE\u05D5 \u05D5\u05D4\u05EA\u05D5\u05DB\u05DF \u05D9\u05D9\u05E9\u05DC\u05D7 \u05DC\u05DE\u05D5\u05D3\u05DC \u05D4\u05D1\u05D9\u05E0\u05D4 \u05D4\u05DE\u05DC\u05D0\u05DB\u05D5\u05EA\u05D9\u05EA. \u05D1\u05DE\u05E7\u05D5\u05DD \u05D6\u05D4: nodata_redact (\u05E2\u05D5\u05EA\u05E7 \u05E0\u05E7\u05D9 \u05DC\u05E2\u05D1\u05D5\u05D3\u05D4) \u05D0\u05D5 nodata_protect (\u05E0\u05E2\u05D9\u05DC\u05D4). \u05DC\u05D0\u05E9\u05E8 \u05D1\u05DB\u05DC \u05D6\u05D0\u05EA?"),`NoData scanned this file on your machine \u2014 nothing left it:
58
64
  ${x.join(`
59
65
  `)}
60
- `+(n?"Read refused: Claude will not read the original. Instead: nodata_redact (a clean copy to work on) or nodata_protect (lock it).":"If you allow it, Claude reads the file itself and its content goes to the AI model. Instead: nodata_redact (a clean copy to work on) or nodata_protect (lock it). Allow anyway?")),R=[...new Set(h.map(S=>S.kind))];return{decision:n?"deny":"ask",reason:b,kind:R[0],...R.length>1?{kinds:R}:{}}}function wc(e,t,r){let n=fs(e,t,r).map(s=>s.line);return n.length===0?null:`NoData \xB7 ON SCREEN rule. What you just read holds personal data:
66
+ `+(n?"Read refused: Claude will not read the original. Instead: nodata_redact (a clean copy to work on) or nodata_protect (lock it).":"If you allow it, Claude reads the file itself and its content goes to the AI model. Instead: nodata_redact (a clean copy to work on) or nodata_protect (lock it). Allow anyway?")),E=[...new Set(m.map(b=>b.kind))];return{decision:n?"deny":"ask",reason:_,kind:E[0],...E.length>1?{kinds:E}:{}}}function Gc(e,t,r){let n=gs(e,t,r).map(s=>s.line);return n.length===0?null:`NoData \xB7 ON SCREEN rule. What you just read holds personal data:
61
67
  ${n.join(`
62
68
  `)}
63
- The user's screen is not private \u2014 someone may be beside them. Answer with totals, counts, groupings and trends. Do not print names, ID / policy / account numbers, addresses, phones, or amounts tied to a person \u2014 not in a table, not as an "example" \u2014 unless the user explicitly asks to see those values. For a clean, anonymised or shareable version use nodata_redact \u2014 never your own script: it verifies the copy and records a proof.`+(Y()==="he"?" Answer the user in Hebrew.":"")}function _s(e){try{let t=_e(X(),".nodata");os(t,{recursive:!0}),Ea(_e(t,"gate.log"),JSON.stringify({at:new Date().toISOString(),...e})+`
64
- `,{mode:384})}catch{}}function kc(e,t){_s({tool:e,decision:t.decision,...t.kind?{kind:t.kind}:{},...t.kinds?.length?{kinds:t.kinds}:{}})}function vc(e,t){let r=typeof e=="string"&&e.trim()?e.trim().toLowerCase():void 0,n=typeof t.agent_type=="string"&&t.agent_type.trim()?t.agent_type.trim().toLowerCase():r==="claude-code"?"main":void 0;return{host:r,type:n}}function Sc(e,t,r){let n=typeof r=="string"&&r?r:void 0;return e?{host:t??(n?"claude-code":"claude-desktop"),mode:n??An}:{host:t,mode:n}}async function xs(e){let t=e.includes("--block"),r=e.includes("--post"),n=e.indexOf("--host"),s=n>=0&&e[n+1]&&!e[n+1].startsWith("--")?e[n+1]:void 0,i=e.includes("--plugin"),o="";for await(let g of process.stdin)o+=g;let a;try{a=JSON.parse(o)}catch{return}let c=a.tool_name??"";if(vn(c))return;let{host:l,mode:p}=Sc(i,s,a.permission_mode),d=typeof a.tool_use_id=="string"&&a.tool_use_id?a.tool_use_id:void 0;if(r){let g=await an(d,"post",()=>{fc(a.session_id,c,a.tool_input??{},a.tool_response);let u=mc(a.tool_response);return Object.keys(u).length&&_s({tool:c,leaked:Object.values(u).reduce((y,h)=>y+h,0)}),[gc(u),wc(c,a.tool_input??{},a.cwd??process.cwd())].filter(Boolean).join(`
69
+ The user's screen is not private \u2014 someone may be beside them. Answer with totals, counts, groupings and trends. Do not print names, ID / policy / account numbers, addresses, phones, or amounts tied to a person \u2014 not in a table, not as an "example" \u2014 unless the user explicitly asks to see those values. For a clean, anonymised or shareable version use nodata_redact \u2014 never your own script: it verifies the copy and records a proof.`+(Q()==="he"?" Answer the user in Hebrew.":"")}function vs(e){try{let t=_e(K(),".nodata");ds(t,{recursive:!0}),Za(_e(t,"gate.log"),JSON.stringify({at:new Date().toISOString(),...e})+`
70
+ `,{mode:384})}catch{}}function Vc(e,t){vs({tool:e,decision:t.decision,...t.kind?{kind:t.kind}:{},...t.kinds?.length?{kinds:t.kinds}:{}})}function Xc(e,t){let r=typeof e=="string"&&e.trim()?e.trim().toLowerCase():void 0,n=typeof t.agent_type=="string"&&t.agent_type.trim()?t.agent_type.trim().toLowerCase():r==="claude-code"?"main":void 0;return{host:r,type:n}}function Kc(e,t,r){let n=typeof r=="string"&&r?r:void 0;return e?{host:t??(n?"claude-code":"claude-desktop"),mode:n??In}:{host:t,mode:n}}async function Ss(e){let t=e.includes("--block"),r=e.includes("--post"),n=e.indexOf("--host"),s=n>=0&&e[n+1]&&!e[n+1].startsWith("--")?e[n+1]:void 0,i=e.includes("--plugin"),o="";for await(let g of process.stdin)o+=g;let a;try{a=JSON.parse(o)}catch{return}let c=a.tool_name??"";if($n(c))return;let{host:l,mode:f}=Kc(i,s,a.permission_mode),d=typeof a.tool_use_id=="string"&&a.tool_use_id?a.tool_use_id:void 0;if(r){let g=await un(d,"post",()=>{Dc(a.session_id,c,a.tool_input??{},a.tool_response);let u=jc(a.tool_response);return Object.keys(u).length&&vs({tool:c,leaked:Object.values(u).reduce((y,m)=>y+m,0)}),[Hc(u),Gc(c,a.tool_input??{},a.cwd??process.cwd())].filter(Boolean).join(`
65
71
 
66
- `)});g.first&&g.value&&process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:"PostToolUse",additionalContext:g.value}}));return}let m=await an(d,"pre",()=>xc(c,a.tool_input??{},a.cwd??process.cwd(),t,vc(l,a),a.session_id,p)),f=m.value;f.decision!=="allow"&&(m.first&&kc(c,f),process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:f.decision,permissionDecisionReason:f.reason}})))}var Ec="claude-code",hp=` --host ${Ec}`;var Ac=[{type:"id_number",patterns:[/\b\d{9}\b/g,/ת\.?ז\.?\s*:?\s*(\d{9})/g,/זהות\s*:?\s*(\d{9})/g],confidence:.9,replacement:()=>"[\u05EA.\u05D6. \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"phone",patterns:[/\b0[2-9]\d[\s\-]?\d{7}\b/g,/\b05[0-9][\s\-]?\d{7}\b/g,/\+972[\s\-]?[2-9]\d[\s\-]?\d{7}\b/g],confidence:.95,replacement:()=>"[\u05D8\u05DC\u05E4\u05D5\u05DF \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"email",patterns:[/[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}/g],confidence:.99,replacement:e=>{let[,t]=e.split("@");return`[\u05D0\u05D9\u05DE\u05D9\u05D9\u05DC: ***@${t}]`}},{type:"full_name",patterns:[/(?:לקוח|מטופל|מועמד|שם|נהג|מבוטח|תובע|נתבע|שוכר|מחזיק)[:\s]+([א-ת][א-ת"'\-\s]{2,30}?)(?=[,\n\d]|ת\.ז)/g,/(?:עו"ד|ד"ר|פרופ'|מר|גברת)\s+([א-ת][א-ת"'\-\s]{2,25}?)(?=[,\n])/g],confidence:.75,replacement:()=>"[\u05E9\u05DD \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"bank_account",patterns:[/\b\d{2}[\-]\d{5,9}[\-]\d{2,3}\b/g,/(?:חשבון|ח-ן)\s*:?\s*(\d[\d\-]{8,15})/g],confidence:.88,replacement:()=>"[\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7 \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"medical",patterns:[/(?<![א-ת])[בהוכלמש]{0,2}(?:סוכרת|יתר לחץ דם|אסתמה|דיכאון|חרדה|סרטן|אי ספיקת לב|אפילפסיה)(?![א-ת])/g,/\b(?:Metformin|Lisinopril|Atorvastatin|Amlodipine|Sertraline|Fluoxetine|Omeprazole|Warfarin|Aspirin|Insulin)\b/gi,/\bHbA1c\s*:?\s*[\d.]+%?/g,/\bBMI\s*:?\s*[\d.]+/g,/(?<![א-ת])[בהוכלמש]{0,2}אבחנ[הות]\s*:?\s*[^,\n.]{2,40}/g,/\b(?:Diagnosis|diagnosed\s+with)\s*:?\s*[^,\n.]{2,40}/gi,/\b(?:(?:type\s*[12]\s+)?diabetes(?:\s+mellitus)?|hypertension|asthma|epilepsy|schizophrenia|bipolar\s+disorder|HIV|hepatitis(?:\s+[A-C]\b)?|heart\s+failure|COPD|multiple\s+sclerosis|Crohn'?s\s+disease)\b/gi,/(?<![א-ת])[בהוכלמש]{0,2}(?:אינסולין|מטפורמין|אספירין|קומדין|אומפרדקס|פרוזק|ציפרלקס|אטורבסטטין|אמלודיפין)(?![א-ת])/g],confidence:.85,replacement:()=>"[\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9 \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"financial_amount",patterns:[/[\d,]+(?:\.\d{2})?\s*(?:₪|ש"ח|NIS|שקל(?:ים)?)/g,/(?:₪|NIS)\s*[\d,]+(?:\.\d{2})?/g],confidence:.92,replacement:()=>"[\u05E1\u05DB\u05D5\u05DD \u05DB\u05E1\u05E4\u05D9 \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"birth_date",patterns:[/(?:תאריך לידה|נולד|נולדה|ד\.ל\.)\s*:?\s*\d{1,2}[\/\.\-]\d{1,2}[\/\.\-]\d{2,4}/g,/(?<![א-ת])[בהוכלמש]{0,2}גיל\s*:?\s*\d{1,3}\b/g],confidence:.88,replacement:()=>"[\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4 \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"address",patterns:[/רחוב\s+[א-ת][א-ת\s"'\-]{2,30}\s+\d{1,5}/g,/(?:רח'|רח\.)\s+[א-ת][א-ת\s"'\-]{2,30}\d{1,5}/g],confidence:.72,replacement:()=>"[\u05DB\u05EA\u05D5\u05D1\u05EA \u05DE\u05D5\u05E1\u05EA\u05E8\u05EA]"},{type:"license_plate",patterns:[/\b\d{2,3}[\-]\d{2,3}[\-]\d{2,3}\b/g],confidence:.8,replacement:()=>"[\u05DC\u05D5\u05D7\u05D9\u05EA \u05E8\u05D9\u05E9\u05D5\u05D9 \u05DE\u05D5\u05E1\u05EA\u05E8\u05EA]"}];function $c(e){if(e.length!==9)return!1;let t=e.split("").map(Number),r=0;for(let n=0;n<9;n++){let s=t[n]*(n%2===0?1:2);s>9&&(s-=9),r+=s}return r%10===0}var xe=class{constructor(t){this.enabledTypes=new Set(t)}detect(t){let r=[],n=new Set;for(let i of Ac)if(this.enabledTypes.has(i.type))for(let o of i.patterns){let a=new RegExp(o.source,o.flags),c;for(;(c=a.exec(t))!==null;){let l=c[0],p=`${i.type}:${c.index}`;if(!n.has(p)){if(n.add(p),i.type==="id_number"){let d=l.replace(/\D/g,"");if(/^\d{9}$/.test(l)&&d.length===9&&!$c(d))continue}r.push({type:i.type,value:l,startIndex:c.index,endIndex:c.index+l.length,confidence:i.confidence,replacement:i.replacement(l,i.type)})}}}r.sort((i,o)=>i.startIndex-o.startIndex||o.confidence-i.confidence);let s=[];for(let i of r)s.some(a=>i.startIndex<a.endIndex&&i.endIndex>a.startIndex)||s.push(i);return s}};var C=["GDPR","CPRA","PPL"],Ic=["GDPR-9","CPRA","PPL"],Rc=[{id:"person_name",type:"name",sensitivity:"high",regulations:[...C],en:["firstname","lastname","fname","lname","middle name","maiden name","birth name","preferred name","display name","nickname","surname","given name","full name"],he:["\u05E9\u05DD \u05E4\u05E8\u05D8\u05D9","\u05E9\u05DD \u05DE\u05E9\u05E4\u05D7\u05D4","\u05E9\u05DD \u05DE\u05DC\u05D0","\u05DB\u05D9\u05E0\u05D5\u05D9","\u05E9\u05DD \u05E0\u05E2\u05D5\u05E8\u05D9\u05DD"],ar:["\u0627\u0644\u0627\u0633\u0645","\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0626\u0644\u0629","\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0643\u0627\u0645\u0644"],ru:["\u0438\u043C\u044F","\u0444\u0430\u043C\u0438\u043B\u0438\u044F","\u043E\u0442\u0447\u0435\u0441\u0442\u0432\u043E","\u0444\u0438\u043E"]},{id:"birth_place",type:"location",sensitivity:"medium",regulations:[...C],en:["birth place","birthplace","place of birth"],he:["\u05DE\u05E7\u05D5\u05DD \u05DC\u05D9\u05D3\u05D4","\u05D0\u05E8\u05E5 \u05DC\u05D9\u05D3\u05D4"],ar:["\u0645\u0643\u0627\u0646 \u0627\u0644\u0645\u064A\u0644\u0627\u062F"],ru:["\u043C\u0435\u0441\u0442\u043E \u0440\u043E\u0436\u0434\u0435\u043D\u0438\u044F"]},{id:"citizenship",type:"sensitive_personal",sensitivity:"high",regulations:[...C],en:["citizenship","nationality"],he:["\u05D0\u05D6\u05E8\u05D7\u05D5\u05EA","\u05DC\u05D0\u05D5\u05DD"],ar:["\u0627\u0644\u062C\u0646\u0633\u064A\u0629"],ru:["\u0433\u0440\u0430\u0436\u0434\u0430\u043D\u0441\u0442\u0432\u043E"]},{id:"marital_status",type:"sensitive_personal",sensitivity:"high",regulations:[...C],en:["marital status"],he:["\u05DE\u05E6\u05D1 \u05DE\u05E9\u05E4\u05D7\u05EA\u05D9"],ar:["\u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0627\u062C\u062A\u0645\u0627\u0639\u064A\u0629"],ru:["\u0441\u0435\u043C\u0435\u0439\u043D\u043E\u0435 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435"]},{id:"government_id",type:"id",sensitivity:"critical",regulations:[...C],en:["ssn","national id","passport","driver license","drivers license","tax id","social security","national insurance","military id","voter id","resident id","residence permit","visa number"],he:["\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA","\u05D3\u05E8\u05DB\u05D5\u05DF","\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF \u05E0\u05D4\u05D9\u05D2\u05D4","\u05DE\u05E1\u05E4\u05E8 \u05D1\u05D9\u05D8\u05D5\u05D7 \u05DC\u05D0\u05D5\u05DE\u05D9","\u05DE\u05E1\u05E4\u05E8 \u05D0\u05D9\u05E9\u05D9","\u05DE\u05E1\u05E4\u05E8 \u05D5\u05D9\u05D6\u05D4","\u05EA\u05E2\u05D5\u05D3\u05EA \u05EA\u05D5\u05E9\u05D1","\u05DE\u05E1\u05E4\u05E8 \u05E2\u05D5\u05E1\u05E7"],ar:["\u0631\u0642\u0645 \u0627\u0644\u0647\u0648\u064A\u0629","\u062C\u0648\u0627\u0632 \u0627\u0644\u0633\u0641\u0631","\u0631\u062E\u0635\u0629 \u0627\u0644\u0642\u064A\u0627\u062F\u0629"],ru:["\u043F\u0430\u0441\u043F\u043E\u0440\u0442","\u0441\u043D\u0438\u043B\u0441","\u0438\u043D\u043D","\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0435 \u0443\u0434\u043E\u0441\u0442\u043E\u0432\u0435\u0440\u0435\u043D\u0438\u0435"]},{id:"institution_person_id",type:"tracking",sensitivity:"medium",regulations:[...C],en:["employee id","employee number","employee no","student id","student number","user id","userid","customer id","customer number","customer no","client id","member id","subscriber id","participant id","profile id","person id","person uuid","lead id","crm contact","account id"],he:["\u05DE\u05E1\u05E4\u05E8 \u05E2\u05D5\u05D1\u05D3","\u05DE\u05E1\u05E4\u05E8 \u05E1\u05D8\u05D5\u05D3\u05E0\u05D8","\u05DE\u05E1\u05E4\u05E8 \u05DC\u05E7\u05D5\u05D7","\u05DE\u05D6\u05D4\u05D4 \u05DC\u05E7\u05D5\u05D7","\u05DE\u05E1\u05E4\u05E8 \u05DE\u05E0\u05D5\u05D9","\u05DE\u05D6\u05D4\u05D4 \u05DE\u05E9\u05EA\u05DE\u05E9"],ar:["\u0631\u0642\u0645 \u0627\u0644\u0645\u0648\u0638\u0641","\u0631\u0642\u0645 \u0627\u0644\u0639\u0645\u064A\u0644"],ru:["\u0442\u0430\u0431\u0435\u043B\u044C\u043D\u044B\u0439 \u043D\u043E\u043C\u0435\u0440","\u043D\u043E\u043C\u0435\u0440 \u043A\u043B\u0438\u0435\u043D\u0442\u0430"]},{id:"patient_id",type:"medical",sensitivity:"critical",regulations:["GDPR-9","HIPAA","PPL"],en:["patient id","patient number","mrn","medical record number"],he:["\u05DE\u05E1\u05E4\u05E8 \u05DE\u05D8\u05D5\u05E4\u05DC","\u05DE\u05E1\u05E4\u05E8 \u05EA\u05D9\u05E7 \u05E8\u05E4\u05D5\u05D0\u05D9"],ar:["\u0631\u0642\u0645 \u0627\u0644\u0645\u0631\u064A\u0636"],ru:["\u043D\u043E\u043C\u0435\u0440 \u043F\u0430\u0446\u0438\u0435\u043D\u0442\u0430"]},{id:"email",type:"email",sensitivity:"high",regulations:[...C],en:["emailaddress","e mail","recovery email","contact email"],he:["\u05D3\u05D5\u05D0\u05DC","\u05D0\u05D9\u05DE\u05D9\u05D9\u05DC"],ar:["\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A"],ru:["\u043F\u043E\u0447\u0442\u0430","\u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u043E\u0447\u0442\u0430","email"]},{id:"phone",type:"phone",sensitivity:"high",regulations:[...C],en:["cellphone","contact number","work phone","home phone","whatsapp","recovery phone","telephone"],he:["\u05D8\u05DC\u05E4\u05D5\u05DF \u05D1\u05D9\u05EA","\u05D8\u05DC\u05E4\u05D5\u05DF \u05E2\u05D1\u05D5\u05D3\u05D4","\u05D5\u05D5\u05D8\u05E1\u05D0\u05E4","\u05DE\u05E1\u05E4\u05E8 \u05E0\u05D9\u05D9\u05D3"],ar:["\u0647\u0627\u062A\u0641","\u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062A\u0641","\u062C\u0648\u0627\u0644"],ru:["\u0442\u0435\u043B\u0435\u0444\u043E\u043D","\u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0439"]},{id:"social_handle",type:"tracking",sensitivity:"medium",regulations:[...C],en:["telegram","linkedin","facebook","twitter","instagram","tiktok","social profile"],he:["\u05D8\u05DC\u05D2\u05E8\u05DD","\u05DC\u05D9\u05E0\u05E7\u05D3\u05D0\u05D9\u05DF","\u05E4\u05D9\u05D9\u05E1\u05D1\u05D5\u05E7","\u05D0\u05D9\u05E0\u05E1\u05D8\u05D2\u05E8\u05DD"]},{id:"address",type:"address",sensitivity:"high",regulations:[...C],en:["house number","apartment","apt","billing address","shipping address","postal code","zip code","postcode","street"],he:["\u05DE\u05E1\u05E4\u05E8 \u05D1\u05D9\u05EA","\u05D3\u05D9\u05E8\u05D4","\u05DB\u05EA\u05D5\u05D1\u05EA \u05DC\u05DE\u05E9\u05DC\u05D5\u05D7","\u05DB\u05EA\u05D5\u05D1\u05EA \u05DC\u05D7\u05D9\u05D5\u05D1","\u05EA.\u05D3","\u05EA\u05D0 \u05D3\u05D5\u05D0\u05E8"],ar:["\u0627\u0644\u0639\u0646\u0648\u0627\u0646","\u0627\u0644\u0634\u0627\u0631\u0639","\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0628\u0631\u064A\u062F\u064A"],ru:["\u0430\u0434\u0440\u0435\u0441","\u0443\u043B\u0438\u0446\u0430","\u0438\u043D\u0434\u0435\u043A\u0441","\u043A\u0432\u0430\u0440\u0442\u0438\u0440\u0430"]},{id:"geo",type:"location",sensitivity:"high",regulations:[...C],en:["geo location","geolocation","latitude","longitude","coordinates","home location","current location"],he:["\u05DE\u05D9\u05E7\u05D5\u05DD","\u05E7\u05D5\u05D0\u05D5\u05E8\u05D3\u05D9\u05E0\u05D8\u05D5\u05EA"],ar:["\u0627\u0644\u0645\u0648\u0642\u0639"],ru:["\u043C\u0435\u0441\u0442\u043E\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435","\u043A\u043E\u043E\u0440\u0434\u0438\u043D\u0430\u0442\u044B"]},{id:"bank_card",type:"financial",sensitivity:"critical",regulations:[...C],en:["bank account","iban","swift","bic","routing number","credit card","creditcard","card number","cvv","card expiry","cc exp","paypal","wallet address","crypto wallet","bitcoin address"],he:["\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7","\u05DE\u05E1\u05E4\u05E8 \u05D7\u05E9\u05D1\u05D5\u05DF","\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9","\u05D0\u05E8\u05E0\u05E7 \u05E7\u05E8\u05D9\u05E4\u05D8\u05D5","\u05D0\u05E8\u05E0\u05E7 \u05D3\u05D9\u05D2\u05D9\u05D8\u05DC\u05D9"],ar:["\u062D\u0633\u0627\u0628 \u0628\u0646\u0643\u064A","\u0631\u0642\u0645 \u0627\u0644\u062D\u0633\u0627\u0628","\u0628\u0637\u0627\u0642\u0629 \u0627\u0626\u062A\u0645\u0627\u0646"],ru:["\u0440\u0430\u0441\u0447\u0435\u0442\u043D\u044B\u0439 \u0441\u0447\u0435\u0442","\u043D\u043E\u043C\u0435\u0440 \u0441\u0447\u0435\u0442\u0430","\u043D\u043E\u043C\u0435\u0440 \u043A\u0430\u0440\u0442\u044B","\u043A\u0440\u0435\u0434\u0438\u0442\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u0430"]},{id:"income_tax",type:"financial",sensitivity:"high",regulations:[...C],en:["salary","income","wage","tax record","tax return","payment history","credit score","net worth","salary grade"],he:["\u05E9\u05DB\u05E8","\u05DE\u05E9\u05DB\u05D5\u05E8\u05EA","\u05D4\u05DB\u05E0\u05E1\u05D4","\u05EA\u05DC\u05D5\u05E9 \u05E9\u05DB\u05E8","\u05D3\u05D5\u05D7 \u05DE\u05E1","\u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D9\u05EA \u05EA\u05E9\u05DC\u05D5\u05DE\u05D9\u05DD","\u05D3\u05D9\u05E8\u05D5\u05D2 \u05D0\u05E9\u05E8\u05D0\u05D9","\u05E9\u05D5\u05D5\u05D9 \u05E0\u05E7\u05D9","\u05D3\u05E8\u05D2\u05EA \u05E9\u05DB\u05E8"],ar:["\u0627\u0644\u0631\u0627\u062A\u0628","\u0627\u0644\u062F\u062E\u0644"],ru:["\u0437\u0430\u0440\u043F\u043B\u0430\u0442\u0430","\u0434\u043E\u0445\u043E\u0434"]},{id:"assets",type:"financial",sensitivity:"high",regulations:[...C],en:["property id","land record","ownership record","title deed","holdings"],he:["\u05D2\u05D5\u05E9 \u05D7\u05DC\u05E7\u05D4","\u05E0\u05E1\u05D7 \u05D8\u05D0\u05D1\u05D5","\u05E8\u05D9\u05E9\u05D5\u05DD \u05DE\u05E7\u05E8\u05E7\u05E2\u05D9\u05DF","\u05D1\u05E2\u05DC\u05D5\u05EA","\u05D0\u05D7\u05D6\u05E7\u05D5\u05EA"],ru:["\u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0441\u0442\u044C","\u043D\u0435\u0434\u0432\u0438\u0436\u0438\u043C\u043E\u0441\u0442\u044C"]},{id:"vehicle",type:"tracking",sensitivity:"medium",regulations:[...C],en:["vin","vehicle id","license plate","registration number","plate number"],he:["\u05DE\u05E1\u05E4\u05E8 \u05E9\u05DC\u05D3\u05D4","\u05DE\u05E1\u05E4\u05E8 \u05E8\u05DB\u05D1","\u05DC\u05D5\u05D7\u05D9\u05EA \u05E8\u05D9\u05E9\u05D5\u05D9"],ru:["\u043D\u043E\u043C\u0435\u0440 \u0430\u0432\u0442\u043E\u043C\u043E\u0431\u0438\u043B\u044F","vin"]},{id:"health",type:"medical",sensitivity:"critical",regulations:["GDPR-9","HIPAA","PPL"],en:["medical record","health condition","health data","lab result","lab results","vaccination","mental health","hospitalization","hospitalisation","disability","insurance number","diagnosis","allergy","prescription","medication","blood type"],he:["\u05EA\u05D9\u05E7 \u05E8\u05E4\u05D5\u05D0\u05D9","\u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05DE\u05E2\u05D1\u05D3\u05D4","\u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05D1\u05D3\u05D9\u05E7\u05D4","\u05D7\u05D9\u05E1\u05D5\u05E0\u05D9\u05DD","\u05D1\u05E8\u05D9\u05D0\u05D5\u05EA \u05E0\u05E4\u05E9","\u05D0\u05E9\u05E4\u05D5\u05D6","\u05E0\u05DB\u05D5\u05EA","\u05DE\u05E6\u05D1 \u05D1\u05E8\u05D9\u05D0\u05D5\u05EA\u05D9"],ar:["\u0627\u0644\u062A\u0634\u062E\u064A\u0635","\u0627\u0644\u0633\u062C\u0644 \u0627\u0644\u0637\u0628\u064A","\u0627\u0644\u0623\u062F\u0648\u064A\u0629"],ru:["\u0434\u0438\u0430\u0433\u043D\u043E\u0437","\u043C\u0435\u0434\u0438\u0446\u0438\u043D\u0441\u043A\u0430\u044F \u043A\u0430\u0440\u0442\u0430","\u0430\u043D\u0430\u043B\u0438\u0437\u044B"]},{id:"biometric",type:"biometric",sensitivity:"critical",regulations:["GDPR-9","CPRA","PPL"],en:["face embedding","face scan","iris scan","retina scan","voice print","voiceprint","voice signature","hand geometry","biometric template","biometric data","dna","genetic data","genome"],he:["\u05D8\u05D1\u05D9\u05E2\u05EA \u05E7\u05D5\u05DC","\u05E1\u05E8\u05D9\u05E7\u05EA \u05E4\u05E0\u05D9\u05DD","\u05E1\u05E8\u05D9\u05E7\u05EA \u05E7\u05E9\u05EA\u05D9\u05EA","\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05D2\u05E0\u05D8\u05D9\u05D9\u05DD",'\u05D3\u05E0"\u05D0'],ar:["\u0628\u0635\u0645\u0629"],ru:["\u0431\u0438\u043E\u043C\u0435\u0442\u0440\u0438\u044F","\u043E\u0442\u043F\u0435\u0447\u0430\u0442\u043E\u043A"]},{id:"employment",type:"employment",sensitivity:"medium",regulations:[...C],en:["employer","job title","employment status","hire date","start date of employment","termination date","performance review","disciplinary"],he:["\u05DE\u05E2\u05E1\u05D9\u05E7","\u05DE\u05E7\u05D5\u05DD \u05E2\u05D1\u05D5\u05D3\u05D4","\u05EA\u05E4\u05E7\u05D9\u05D3 \u05D4\u05E2\u05D5\u05D1\u05D3","\u05EA\u05D0\u05E8\u05D9\u05DA \u05EA\u05D7\u05D9\u05DC\u05EA \u05E2\u05D1\u05D5\u05D3\u05D4","\u05EA\u05D0\u05E8\u05D9\u05DA \u05E1\u05D9\u05D5\u05DD \u05E2\u05D1\u05D5\u05D3\u05D4","\u05D4\u05E2\u05E8\u05DB\u05EA \u05D1\u05D9\u05E6\u05D5\u05E2\u05D9\u05DD","\u05E9\u05D9\u05DE\u05D5\u05E2"],ar:["\u062C\u0647\u0629 \u0627\u0644\u0639\u0645\u0644","\u0627\u0644\u0645\u0633\u0645\u0649 \u0627\u0644\u0648\u0638\u064A\u0641\u064A"],ru:["\u0440\u0430\u0431\u043E\u0442\u043E\u0434\u0430\u0442\u0435\u043B\u044C","\u0434\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C"]},{id:"manager",type:"name",sensitivity:"medium",regulations:[...C],en:["manager","supervisor"],he:["\u05DE\u05E0\u05D4\u05DC \u05D9\u05E9\u05D9\u05E8"]},{id:"education",type:"education",sensitivity:"medium",regulations:[...C],en:["school","university","college","degree","transcript","education history","gpa"],he:["\u05D1\u05D9\u05EA \u05E1\u05E4\u05E8","\u05D0\u05D5\u05E0\u05D9\u05D1\u05E8\u05E1\u05D9\u05D8\u05D4","\u05DE\u05DB\u05DC\u05DC\u05D4","\u05D2\u05D9\u05DC\u05D9\u05D5\u05DF \u05E6\u05D9\u05D5\u05E0\u05D9\u05DD","\u05D4\u05E9\u05DB\u05DC\u05D4","\u05EA\u05D5\u05D0\u05E8 \u05D0\u05E7\u05D3\u05DE\u05D9"],ar:["\u0627\u0644\u062C\u0627\u0645\u0639\u0629","\u0627\u0644\u0645\u062F\u0631\u0633\u0629"],ru:["\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0438\u0435","\u0443\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442"]},{id:"device_online",type:"tracking",sensitivity:"medium",regulations:[...C],en:["ip","ipaddress","ip address","mac address","device id","deviceid","advertising id","idfa","gaid","android id","apple id","cookie id","cookieid","browser fingerprint","user agent","imei"],he:["\u05DB\u05EA\u05D5\u05D1\u05EA ip","\u05DE\u05D6\u05D4\u05D4 \u05DE\u05DB\u05E9\u05D9\u05E8"],ru:["ip \u0430\u0434\u0440\u0435\u0441"]},{id:"account",type:"tracking",sensitivity:"medium",regulations:[...C],en:["username","user name","login","screen name"],he:["\u05E9\u05DD \u05DE\u05E9\u05EA\u05DE\u05E9"],ru:["\u043B\u043E\u0433\u0438\u043D"]},{id:"credential",type:"auth",sensitivity:"critical",regulations:[...C],en:["password","password hash","mfa secret","otp secret","security question","security answer","session id","session token","api key"],he:["\u05E1\u05D9\u05E1\u05DE\u05D4","\u05E1\u05D9\u05E1\u05DE\u05D0","\u05E9\u05D0\u05DC\u05EA \u05D0\u05D1\u05D8\u05D7\u05D4"],ar:["\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631"],ru:["\u043F\u0430\u0440\u043E\u043B\u044C"]},{id:"behavior",type:"behavior",sensitivity:"high",regulations:[...C],en:["purchase history","search history","browsing history","clickstream","usage pattern","behavior profile","behaviour profile"],he:["\u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D9\u05EA \u05E8\u05DB\u05D9\u05E9\u05D5\u05EA","\u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D9\u05EA \u05D7\u05D9\u05E4\u05D5\u05E9","\u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D9\u05EA \u05D2\u05DC\u05D9\u05E9\u05D4","\u05E4\u05E8\u05D5\u05E4\u05D9\u05DC \u05D4\u05EA\u05E0\u05D4\u05D2\u05D5\u05EA"]},{id:"special_category",type:"sensitive_personal",sensitivity:"critical",regulations:[...Ic],en:["race","ethnicity","religion","political opinion","political party","union membership","trade union","sexual orientation","gender identity","criminal record"],he:["\u05D2\u05D6\u05E2","\u05D3\u05EA","\u05D4\u05E9\u05E7\u05E4\u05D4 \u05E4\u05D5\u05DC\u05D9\u05D8\u05D9\u05EA","\u05D7\u05D1\u05E8\u05D5\u05EA \u05D1\u05D0\u05D9\u05D2\u05D5\u05D3","\u05E0\u05D8\u05D9\u05D9\u05D4 \u05DE\u05D9\u05E0\u05D9\u05EA","\u05D6\u05D4\u05D5\u05EA \u05DE\u05D2\u05D3\u05E8\u05D9\u05EA","\u05E8\u05D9\u05E9\u05D5\u05DD \u05E4\u05DC\u05D9\u05DC\u05D9"],ar:["\u0627\u0644\u062F\u064A\u0627\u0646\u0629","\u0627\u0644\u0639\u0631\u0642"],ru:["\u0440\u0435\u043B\u0438\u0433\u0438\u044F","\u043D\u0430\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u044C"]},{id:"family_names",type:"name",sensitivity:"high",regulations:[...C],en:["mother name","father name","spouse","partner name","emergency contact","next of kin","family member","guardian","beneficiary"],he:["\u05E9\u05DD \u05D4\u05D0\u05DD","\u05E9\u05DD \u05D4\u05D0\u05D1","\u05D1\u05DF \u05D6\u05D5\u05D2","\u05D1\u05EA \u05D6\u05D5\u05D2","\u05D0\u05D9\u05E9 \u05E7\u05E9\u05E8 \u05DC\u05D7\u05D9\u05E8\u05D5\u05DD","\u05E7\u05E8\u05D5\u05D1 \u05DE\u05E9\u05E4\u05D7\u05D4","\u05D0\u05E4\u05D5\u05D8\u05E8\u05D5\u05E4\u05D5\u05E1","\u05DE\u05D5\u05D8\u05D1"],ar:["\u0627\u0633\u0645 \u0627\u0644\u0623\u0645","\u0627\u0633\u0645 \u0627\u0644\u0623\u0628","\u0627\u0644\u0632\u0648\u062C"],ru:["\u0441\u0443\u043F\u0440\u0443\u0433","\u043E\u043F\u0435\u043A\u0443\u043D"]},{id:"children",type:"minor_data",sensitivity:"critical",regulations:[...C],en:["children","child name","dependents","dependants"],he:["\u05D9\u05DC\u05D3\u05D9\u05DD","\u05E9\u05DE\u05D5\u05EA \u05D4\u05D9\u05DC\u05D3\u05D9\u05DD"],ar:["\u0627\u0644\u0623\u0637\u0641\u0627\u0644"],ru:["\u0434\u0435\u0442\u0438"]}];function Tc(e){return e.trim().toLowerCase().replace(/["'`׳״]/g,"").replace(/[_\-.]+/g," ").replace(/\s+/g," ").trim()}function ws(){return Rc.map(e=>{let t=[...e.en,...e.he??[],...e.ar??[],...e.ru??[]].map(Tc).filter(Boolean);return{type:e.type,tokens:t.filter(r=>!r.includes(" ")),phrases:t.filter(r=>r.includes(" "))}})}var Cc=[{pattern:/^(?:שם|שם_מלא|שם פרטי|שם_פרטי|שם משפחה|שם_משפחה|שם_אדם|שם הלקוח|שם_הלקוח|שם בן זוג|שם בן_זוג|שם המבוטח|שם_המבוטח|שם המוטב|שם_המוטב|שם מבוטח|שם_מבוטח|שם מוטב|שם_מוטב|שם הילד|שם_הילד|שם הקטין|שם_הקטין|firstname_he|lastname_he|shem|shem_mishpacha|shem_prati)$/i,type:"name",label:"Person name (Hebrew)",labelHe:"\u05E9\u05DD \u05D0\u05D3\u05DD"},{pattern:/^(?:ת"ז|ת\.ז|ת ז|תז|תעודת זהות|תעודת_זהות|מספר זהות|מספר_זהות|מס' זהות|מס_זהות|מס' ת"ז|teudat_zehut|tz|t_z|israeli_id|il_id)$/i,type:"id",label:"Israeli ID",labelHe:"\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA"},{pattern:/^(?:דרכון|מספר דרכון|מס דרכון|רישיון נהיגה|רישיון_נהיגה|רשיון נהיגה|מס רישיון|דרכון_מספר)$/i,type:"id",label:"Passport / DL (Hebrew)",labelHe:"\u05D3\u05E8\u05DB\u05D5\u05DF/\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF"},{pattern:/^(?:מייל|דוא"ל|דוא_ל|דואר אלקטרוני|דואר_אלקטרוני|אימייל|כתובת מייל|כתובת_מייל|כתובת דואר|כתובת_דואר)$/i,type:"email",label:"Email (Hebrew)",labelHe:"\u05D3\u05D5\u05D0\u05E8 \u05D0\u05DC\u05E7\u05D8\u05E8\u05D5\u05E0\u05D9"},{pattern:/^(?:טלפון|טל'|נייד|פלאפון|סלולרי|מספר טלפון|מספר_טלפון|טלפון נייד|טלפון_נייד|מס נייד|מס_נייד|מס' טל)$/i,type:"phone",label:"Phone (Hebrew)",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05D8\u05DC\u05E4\u05D5\u05DF"},{pattern:/^(?:כתובת|כתובת מגורים|כתובת_מגורים|רחוב|מס בית|מספר בית|עיר|ישוב|יישוב|מיקוד|כתובת מלאה|כתובת_מלאה|מען)$/i,type:"address",label:"Address (Hebrew)",labelHe:"\u05DB\u05EA\u05D5\u05D1\u05EA"},{pattern:/^(?:תאריך לידה|תאריך_לידה|ת לידה|תאריך הולדת|תאריך_הולדת|יום הולדת|יום_הולדת|גיל)$/i,type:"dob",label:"Date of birth (Hebrew)",labelHe:"\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4"},{pattern:/^(?:חשבון בנק|חשבון_בנק|מספר חשבון|מספר_חשבון|מס חשבון|מס' חשבון|בנק|סניף|מס סניף|iban|iban_il)$/i,type:"financial",label:"Bank account (Hebrew)",labelHe:"\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7"},{pattern:/^(?:כרטיס אשראי|כרטיס_אשראי|מספר אשראי|מס אשראי|מס' אשראי|cvv|אשראי|מס כרטיס|מס_כרטיס)$/i,type:"financial",label:"Credit card (Hebrew)",labelHe:"\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9"},{pattern:/^(?:שכר|משכורת|הכנסה|פרמיה|שכר ברוטו|שכר_ברוטו|שכר נטו|שכר_נטו|תגמול|בונוס|פיצוי)$/i,type:"financial",label:"Salary / income (Hebrew)",labelHe:"\u05E9\u05DB\u05E8/\u05D4\u05DB\u05E0\u05E1\u05D4"},{pattern:/^(?:אבחון|אבחנה|מחלה|תרופה|מרשם|בדיקה רפואית|בדיקה_רפואית|מצב רפואי|מצב_רפואי|חיסון|תוצאת בדיקה|תוצאת_בדיקה|רופא|רגישות|אלרגיה|סוג דם|סוג_דם)$/i,type:"medical",label:"Medical (Hebrew)",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9"},{pattern:/^(?:מספר פוליסה|מספר_פוליסה|מס פוליסה|מס' פוליסה|פוליסה|מספר חבר|מספר_חבר|מס חבר|מספר ביטוח|מספר_ביטוח|policy_?number|policy_?no|policy_?id)$/i,type:"policy",label:"Insurance policy number (Hebrew)",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05E4\u05D5\u05DC\u05D9\u05E1\u05D4"},{pattern:/^(?:מספר סוכן|מספר_סוכן|מס סוכן|מס' סוכן|מס_סוכן|קוד סוכן|קוד_סוכן|מספר משווק|מספר_משווק|מספר יצרן|סוכן ביטוח|agent_?number|agent_?no|agent_?id|agent_?code|broker_?id|broker_?number)$/i,type:"agent_id",label:"Insurance agent / broker number (Hebrew)",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05E1\u05D5\u05DB\u05DF"},{pattern:/^(?:שם הילד|שם_הילד|תעודת זהות של ילד|ילדים|קטין|מספר ילדים|מספר_ילדים|תעודת לידה|ת לידה ילד)$/i,type:"minor_data",label:"Minor data (Hebrew)",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05E2\u05DC \u05E7\u05D8\u05D9\u05DF"},{pattern:/^(?:דת|לאום|מין|נטייה מינית|נטייה_מינית|השקפה פוליטית|השקפה_פוליטית|מצב משפחתי|מצב_משפחתי|עדה|מוצא)$/i,type:"sensitive_personal",label:"Sensitive personal (Hebrew)",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05D0\u05D9\u05E9\u05D9 \u05E8\u05D2\u05D9\u05E9"},{pattern:/^(?:מספר רכב|מספר_רכב|מס רכב|מס' רכב|לוחית רישוי|לוחית_רישוי|מספר רישוי|מספר_רישוי)$/i,type:"tracking",label:"Vehicle ID (Hebrew)",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05E8\u05DB\u05D1"}];function Le(e){let t=String(e??"").replace(/\D/g,"");if(t.length===0||t.length>9)return!1;let r=t.padStart(9,"0"),n=0;for(let s=0;s<9;s++){let i=parseInt(r[s]??"0",10)*(s%2+1);i>9&&(i-=9),n+=i}return n%10===0&&parseInt(r,10)>0}var yt=/(?<!\d)(?<!\d[.,])(?:\+972[\s-]?|0)(?:5[0-9]|7[0-9]|[2-4]|[89])(?:[\s-]?\d){7}(?!\d)(?![.,]\d)/g,bt=/(?<!:\/\/[^\s/@]*)[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/gi;var $n=/\b[A-Z]{2}\d{2}(?: ?[A-Z0-9]{4}){2,7}(?: ?[A-Z0-9]{1,4})?\b/g;function ks(e){let t=String(e??"").replace(/\s/g,"").toUpperCase();if(!/^[A-Z]{2}\d{2}[A-Z0-9]{10,30}$/.test(t))return!1;let r=t.slice(4)+t.slice(0,4),n=0;for(let s of r){let i=s>="A"&&s<="Z"?String(s.charCodeAt(0)-55):s;for(let o of i)n=(n*10+Number(o))%97}return n===1}function vs(e){let t=String(e??"").replace(/\D/g,"");if(t.length<13||t.length>19||!/^[2-6]/.test(t))return!1;let r=0,n=!1;for(let s=t.length-1;s>=0;s--){let i=t.charCodeAt(s)-48;if(i<0||i>9)return!1;n&&(i*=2,i>9&&(i-=9)),r+=i,n=!n}return r%10===0}function Ss(e){if(!e)return null;let t=e.trim();for(let r of Cc)if(r.pattern.test(t))return{type:r.type,label:r.label,labelHe:r.labelHe};return null}var Pc=[{type:"biometric",tokens:["biometric","fingerprint","\u05D1\u05D9\u05D5\u05DE\u05D8\u05E8\u05D9"],phrases:["face id","\u05D8\u05D1\u05D9\u05E2\u05EA \u05D0\u05E6\u05D1\u05E2"]},{type:"medical",tokens:["diagnosis","medical","disease","medication","prescription","allergy","vaccine","\u05D0\u05D1\u05D7\u05D5\u05DF","\u05D0\u05D1\u05D7\u05E0\u05D4","\u05DE\u05D7\u05DC\u05D4","\u05EA\u05E8\u05D5\u05E4\u05D4","\u05DE\u05E8\u05E9\u05DD","\u05D7\u05D9\u05E1\u05D5\u05DF","\u05D0\u05DC\u05E8\u05D2\u05D9\u05D4"],phrases:["medical record","blood type","\u05DE\u05E6\u05D1 \u05E8\u05E4\u05D5\u05D0\u05D9","\u05E1\u05D5\u05D2 \u05D3\u05DD"]},{type:"sensitive_personal",tokens:["religion","ethnicity","nationality","\u05D3\u05EA","\u05DC\u05D0\u05D5\u05DD","\u05E2\u05D3\u05D4","\u05DE\u05D5\u05E6\u05D0"],phrases:["sexual orientation","marital status","\u05DE\u05E6\u05D1 \u05DE\u05E9\u05E4\u05D7\u05EA\u05D9","\u05E0\u05D8\u05D9\u05D9\u05D4 \u05DE\u05D9\u05E0\u05D9\u05EA"]},{type:"minor_data",tokens:["minor","\u05E7\u05D8\u05D9\u05DF"],phrases:["child name","\u05E9\u05DD \u05D4\u05D9\u05DC\u05D3","\u05E9\u05DD \u05D4\u05E7\u05D8\u05D9\u05DF"]},{type:"id",tokens:["ssn","passport","\u05D6\u05D4\u05D5\u05EA","\u05D3\u05E8\u05DB\u05D5\u05DF"],phrases:["national id","id number","identity number","social security","driver license","driving license","drivers license","passport number","tax id","\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA","\u05DE\u05E1\u05E4\u05E8 \u05D6\u05D4\u05D5\u05EA","\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF \u05E0\u05D4\u05D9\u05D2\u05D4"]},{type:"financial",tokens:["iban","swift","bic","salary","income","wage","\u05D0\u05E9\u05E8\u05D0\u05D9","\u05E9\u05DB\u05E8","\u05DE\u05E9\u05DB\u05D5\u05E8\u05EA","\u05D4\u05DB\u05E0\u05E1\u05D4"],phrases:["bank account","account number","credit card","card number","routing number","sort code","\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7","\u05DE\u05E1\u05E4\u05E8 \u05D7\u05E9\u05D1\u05D5\u05DF","\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9"]},{type:"policy",tokens:["policy","\u05E4\u05D5\u05DC\u05D9\u05E1\u05D4"],phrases:["policy number","member number","\u05DE\u05E1\u05E4\u05E8 \u05E4\u05D5\u05DC\u05D9\u05E1\u05D4"]},{type:"agent_id",tokens:["\u05DE\u05E9\u05D5\u05D5\u05E7"],phrases:["agent number","agent code","broker id","\u05DE\u05E1\u05E4\u05E8 \u05E1\u05D5\u05DB\u05DF"]},{type:"dob",tokens:["dob","birthdate","birthday","\u05DC\u05D9\u05D3\u05D4","\u05D4\u05D5\u05DC\u05D3\u05EA","\u05D2\u05D9\u05DC"],phrases:["date of birth","birth date","\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4"]},{type:"phone",tokens:["phone","tel","mobile","cell","fax","\u05D8\u05DC\u05E4\u05D5\u05DF","\u05E0\u05D9\u05D9\u05D3","\u05E4\u05DC\u05D0\u05E4\u05D5\u05DF","\u05E1\u05DC\u05D5\u05DC\u05E8\u05D9"],phrases:["phone number","mobile number","cell phone","\u05D8\u05DC\u05E4\u05D5\u05DF \u05E0\u05D9\u05D9\u05D3"]},{type:"email",tokens:["email","mail","\u05D0\u05D9\u05DE\u05D9\u05D9\u05DC","\u05DE\u05D9\u05D9\u05DC","\u05D3\u05D5\u05D0\u05DC"],phrases:["email address","e mail","\u05D3\u05D5\u05D0\u05E8 \u05D0\u05DC\u05E7\u05D8\u05E8\u05D5\u05E0\u05D9","\u05DB\u05EA\u05D5\u05D1\u05EA \u05DE\u05D9\u05D9\u05DC"]},{type:"address",tokens:["address","street","city","zipcode","zip","postcode","\u05DB\u05EA\u05D5\u05D1\u05EA","\u05E8\u05D7\u05D5\u05D1","\u05E2\u05D9\u05E8","\u05D9\u05E9\u05D5\u05D1","\u05D9\u05D9\u05E9\u05D5\u05D1","\u05DE\u05D9\u05E7\u05D5\u05D3","\u05DE\u05E2\u05DF"],phrases:["home address","postal code","street address","zip code","\u05DB\u05EA\u05D5\u05D1\u05EA \u05DE\u05D2\u05D5\u05E8\u05D9\u05DD"]},{type:"location",tokens:["gps","latitude","longitude","geolocation","\u05DE\u05D9\u05E7\u05D5\u05DD"],phrases:["gps coordinates"]},{type:"tracking",tokens:["plate","vehicle","\u05E8\u05DB\u05D1","\u05E8\u05D9\u05E9\u05D5\u05D9"],phrases:["license plate","vehicle number","plate number","\u05DE\u05E1\u05E4\u05E8 \u05E8\u05DB\u05D1"]},...ws(),{type:"name",tokens:["name","\u05E9\u05DD"],phrases:["first name","last name","full name","family name","given name","surname","\u05E9\u05DD \u05E4\u05E8\u05D8\u05D9","\u05E9\u05DD \u05DE\u05E9\u05E4\u05D7\u05D4","\u05E9\u05DD \u05DE\u05DC\u05D0"]}];function _t(e){if(!e||/^\[[A-Z_]+(?:-\d+)?\]$/.test(e.trim()))return null;let t=e.trim().toLowerCase().replace(/["'`׳״]/g,"").replace(/[_\-.]+/g," ").replace(/\s+/g," ").trim();if(!t)return null;let r=new Set(t.match(/[\p{L}\p{N}]+/gu)??[]);for(let n of Pc)if(n.phrases?.some(i=>t.includes(i))||n.tokens?.some(i=>r.has(i)))return{type:n.type,label:n.type,labelHe:xt(n.type)};return null}function xt(e){return{id:"\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA",agent_id:"\u05DE\u05E1\u05E4\u05E8 \u05E1\u05D5\u05DB\u05DF",employment:"\u05E4\u05E8\u05D8\u05D9 \u05EA\u05E2\u05E1\u05D5\u05E7\u05D4",education:"\u05D4\u05E9\u05DB\u05DC\u05D4",behavior:"\u05E4\u05E8\u05D5\u05E4\u05D9\u05DC \u05D4\u05EA\u05E0\u05D4\u05D2\u05D5\u05EA",policy:"\u05DE\u05E1\u05E4\u05E8 \u05E4\u05D5\u05DC\u05D9\u05E1\u05D4",name:"\u05E9\u05DD \u05D0\u05D3\u05DD",email:"\u05D3\u05D5\u05D0\u05E8 \u05D0\u05DC\u05E7\u05D8\u05E8\u05D5\u05E0\u05D9",phone:"\u05DE\u05E1\u05E4\u05E8 \u05D8\u05DC\u05E4\u05D5\u05DF",address:"\u05DB\u05EA\u05D5\u05D1\u05EA",dob:"\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4",financial:"\u05E4\u05E8\u05D8\u05D9\u05DD \u05E4\u05D9\u05E0\u05E0\u05E1\u05D9\u05D9\u05DD",medical:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9",minor_data:"\u05DE\u05D9\u05D3\u05E2 \u05E2\u05DC \u05E7\u05D8\u05D9\u05DF",sensitive_personal:"\u05DE\u05D9\u05D3\u05E2 \u05D0\u05D9\u05E9\u05D9 \u05E8\u05D2\u05D9\u05E9",biometric:"\u05DE\u05D9\u05D3\u05E2 \u05D1\u05D9\u05D5\u05DE\u05D8\u05E8\u05D9",auth:"\u05E1\u05D9\u05E1\u05DE\u05D0\u05D5\u05EA/\u05E1\u05D5\u05D3\u05D5\u05EA",tracking:"\u05DE\u05D6\u05D4\u05D9 \u05DE\u05E2\u05E7\u05D1",location:"\u05DE\u05D9\u05E7\u05D5\u05DD"}[e]??"\u05DE\u05D9\u05D3\u05E2 \u05D0\u05D9\u05E9\u05D9"}function Es(e){let t=0,r=0,n=0,s=0,i=0;for(let a of e)typeof a=="string"&&(Le(a)&&t++,yt.lastIndex=0,yt.test(a)&&r++,bt.lastIndex=0,bt.test(a)&&n++,$n.lastIndex=0,[...a.matchAll($n)].some(c=>ks(c[0]))&&s++,vs(a)&&i++);let o=e.length||1;return t/o>=.3?{type:"id",label:"Israeli ID (sniffed)",matchedSample:t}:s/o>=.3?{type:"financial",label:"IBAN-IL (sniffed)",matchedSample:s}:r/o>=.3?{type:"phone",label:"IL phone (sniffed)",matchedSample:r}:n/o>=.3?{type:"email",label:"Email (sniffed)",matchedSample:n}:i/o>=.3?{type:"financial",label:"Credit card (sniffed)",matchedSample:i}:null}var Lc=[{type:"full_name",kind:"name",severity:"medium",hint:`A person's name in free text (after a role word such as \u05DC\u05E7\u05D5\u05D7 / \u05DE\u05E8 / \u05E2\u05D5"\u05D3, or Client: / Mr.).`},{type:"bank_account",kind:"bank_account",severity:"high",hint:"An Israeli bank account number (branch-account-check form) in plaintext."},{type:"medical",kind:"medical",severity:"high",hint:"Medical information (diagnosis, medication, lab value) in plaintext."},{type:"birth_date",kind:"dob",severity:"medium",hint:"A date of birth in plaintext."},{type:"address",kind:"address",severity:"medium",hint:"A street address in plaintext."},{type:"license_plate",kind:"plate",severity:"low",hint:"A vehicle licence plate in plaintext."}],Nc=/^(?:לקוח|מטופל|מועמד|שם|נהג|מבוטח|תובע|נתבע|שוכר|מחזיק|עו"ד|ד"ר|פרופ'|מר|גברת|חשבון|ח-ן|[בהוכלמש]{0,2}אבחנ[הות]|תאריך לידה|נולד|נולדה|ד\.ל\.|[בהוכלמש]{0,2}גיל|[Dd]iagnosis|[Dd]iagnosed\s+with)\s*:?\s*/;function Oc(e,t,r,n){if(n==="address")return{start:t,end:r};let s=Nc.exec(e.slice(t,r));return s&&t+s[0].length<r?{start:t+s[0].length,end:r}:{start:t,end:r}}function z(e,t,r=()=>!0){let n=[],s=new RegExp(e.source,e.flags.includes("g")?e.flags:e.flags+"g");for(let i of t.matchAll(s)){let o=i[1];if(!o||!r(o))continue;let a=(i.index??0)+i[0].indexOf(o);n.push({start:a,end:a+o.length})}return n}var As=String.raw`[A-Z][a-z']+(?:-[A-Z]?[a-z']+)*`,In=String.raw`${As}(?:[ \t]+${As}){0,2}`,Dc=new RegExp(String.raw`\b(?:Mr|Mrs|Ms|Miss|Dr|Prof)\.?[ \t]+(${In})`),Fc=new RegExp(String.raw`\b(?:Client|Customer|Patient|Name|Full name|Beneficiary|Insured|Applicant|Tenant|Employee|Holder|Investor)[ \t]*:[ \t]*(${In})`),jc=new RegExp(String.raw`\b(${In})(?=,[ \t]*\d{1,3}[ \t]*,|[ \t]*\(\d{1,3}\))`,"g"),Mc=/^(?:Figure|Fig|Table|Step|Section|Chapter|Page|Shot|Scene|Part|Item|Note|Appendix|Version|Level|Phase|Round|Room|Floor|Line|Act|Episode|Season|Slide|Clip|Take)$/,Hc=/\b(\d{1,5}[ \t]+(?:[A-Z][A-Za-z'-]*[ \t]+){1,3}(?:Street|St|Road|Rd|Avenue|Ave|Boulevard|Blvd|Lane|Ln|Drive|Way|Court|Ct|Place|Pl)\b\.?)/,Uc=/\b(?:policy|claim|account|member|customer|client|contract|case|reference|ref|company|registration)[ \t]+(?:number|no\.?|num\.?|#)[ \t]*:?[ \t]*([A-Z]{0,4}-?\d[\d-]{3,}\d[A-Z]?)\b/i,Bc=String.raw`\d{1,2}[\/\-.]\d{1,2}[\/\-.]\d{2,4}|\d{4}[\/\-.]\d{1,2}[\/\-.]\d{1,2}|\d{1,2}\s+[A-Z][a-z]{2,8}\s+\d{4}|[A-Z][a-z]{2,8}\s+\d{1,2},?\s+\d{4}`,zc=new RegExp(String.raw`\b(?:date\s+of\s+birth|birth\s*date|d\.?o\.?b\.?|born(?:\s+on)?)\s*[:\-]?\s*(${Bc})`,"i"),Wc=/\b((?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4})\b/,Gc=/\b((?!BG|GB|NK|KN|TN|NT|ZZ)[A-CEGHJ-PR-TW-Z][A-CEGHJ-NPR-TW-Z]\s?\d{2}\s?\d{2}\s?\d{2}\s?[A-D])\b/,Vc=/(?<![\w+])(\+(?!972)[1-9][\d\s().-]{7,20}\d)/,$s=e=>e.replace(/\D/g,"").length,Xc=String.raw`(?:(?<![א-ת])ת["'׳״]?\.?ז\.?|תעודת[\s_]?זהות|מספר[\s_]?זהות|מס['׳]?[\s_]?זהות|\bID[ \t]*(?:No\.?|Number|#)|\bnational[ \t]+ID|\bidentity[ \t]+(?:No\.?|number)|\bteudat[\s_]?zehut)`,Kc=new RegExp(String.raw`${Xc}[ \t]*[:#.\-]?[ \t]*(\d[\d \t-]{6,10}\d)(?![\d-])`,"i"),Zc=e=>{let t=e.replace(/\D/g,"");return t.length!==8&&t.length!==9||/^\d{9}$/.test(e)||/^\d{8}-\d$/.test(e)?!1:Le(t)},Yc=/(?:(?<![א-ת])דרכון|\bpassport(?:[ \t]*(?:No\.?|Number|#))?)[ \t]*[:#.\-]?[ \t]*([A-Z]{0,2}\d{6,9})(?![\dA-Z])/i,Jc=[{kind:"name",severity:"medium",hint:"A person's name in free text (after Mr. / Dr. / Client: \u2026, or with an age beside it).",find:e=>[...z(Dc,e),...z(Fc,e),...z(jc,e,t=>!t.split(/[ \t]/).some(r=>Mc.test(r)))]},{kind:"address",severity:"medium",hint:"A street address in plaintext.",find:e=>z(Hc,e)},{kind:"reference",severity:"medium",hint:"A policy, claim, account or company number in plaintext.",find:e=>z(Uc,e)},{kind:"dob",severity:"medium",hint:"A date of birth in plaintext.",find:e=>z(zc,e)},{kind:"national_id",severity:"high",hint:"A national ID number (an Israeli ID after its word, US SSN, UK NINO) in plaintext.",find:e=>[...z(Wc,e),...z(Gc,e),...z(Kc,e,Zc)]},{kind:"passport",severity:"high",hint:"A passport number, after the word that announces it, in plaintext.",find:e=>z(Yc,e)},{kind:"phone",severity:"high",hint:"A phone number in international form in plaintext.",find:e=>z(Vc,e,t=>$s(t)>=8&&$s(t)<=15)}];function qc(e){let t=new Map;for(let r of e){let n=t.get(r.kind);t.set(r.kind,n?{...n,find:s=>[...n.find(s),...r.find(s)]}:r)}return[...t.values()]}function Is(){let e=Lc.map(({type:t,kind:r,severity:n,hint:s})=>{let i=new xe([t]);return{kind:r,severity:n,hint:s,find:o=>i.detect(o).map(a=>Oc(o,a.startIndex,a.endIndex,r))}});return qc([...e,...Jc])}var we={_comment:"CANONICAL secret ruleset \u2014 the SINGLE SOURCE OF TRUTH for hardcoded-secret detection, loaded by BOTH the web scanner (lib/soc/exposure-map.ts) and the installed Capsule agent (apps/desktop/src-tauri/src/scanner.rs, via include_str!). Patterns are written in the regex subset both JavaScript and the Rust `regex` crate accept (no lookaround, no backreferences). A connection string counts only WITH credentials (user:pass@). Edit here once and both engines stay aligned.",rules:[{id:"aws-access-key",subkind:"aws_access_key",name:"AWS Access Key",severity:"critical",pattern:"(?:^|[^A-Z0-9])AKIA(?!X{16})[A-Z2-7]{16}(?:[^A-Z2-7]|$)",hint:"AWS access key id detected. Rotate via IAM and move to an environment variable."},{id:"aws-secret-key",subkind:"aws_secret_key",name:"AWS Secret Key",severity:"critical",pattern:`(?:aws_secret_access_key|aws_secret_key|secret_access_key)\\s*[=:]\\s*['"]?[A-Za-z0-9/+=]{40}['"]?`,hint:"AWS secret access key detected. Rotate immediately."},{id:"gcp-api-key",subkind:"gcp_api_key",name:"GCP API Key",severity:"critical",pattern:"AIza[0-9A-Za-z_-]{35}",hint:"Google API key detected. Restrict or rotate it in the Google Cloud console."},{id:"gcp-service-account",subkind:"gcp_service_account",name:"GCP Service Account",severity:"critical",pattern:'"type"\\s*:\\s*"service_account"',hint:"GCP service-account JSON detected. Move it out of the repo and rotate the key."},{id:"github-token",subkind:"github_token",name:"GitHub Token",severity:"critical",pattern:"gh[pousr]_[0-9a-zA-Z]{36,}",hint:"GitHub token detected. Revoke at https://github.com/settings/tokens."},{id:"github-fine-grained",subkind:"github_fine_grained_token",name:"GitHub Fine-Grained Token",severity:"critical",pattern:"github_pat_[0-9a-zA-Z_]{22,}",hint:"GitHub fine-grained token detected. Revoke it in GitHub settings."},{id:"gitlab-token",subkind:"gitlab_token",name:"GitLab Token",severity:"critical",pattern:"glpat-[0-9a-zA-Z_-]{20,}",hint:"GitLab token detected. Revoke it in GitLab access tokens."},{id:"stripe-secret",subkind:"stripe_key",name:"Stripe Secret Key",severity:"critical",pattern:"sk_live_[0-9a-zA-Z]{24,}",hint:"Stripe live secret key detected. Roll it in the Stripe dashboard."},{id:"stripe-restricted",subkind:"stripe_restricted_key",name:"Stripe Restricted Key",severity:"critical",pattern:"rk_live_[0-9a-zA-Z]{24,}",hint:"Stripe restricted key detected. Roll it in the Stripe dashboard."},{id:"slack-token",subkind:"slack_token",name:"Slack Token",severity:"high",pattern:"xox[baprs]-[0-9a-zA-Z-]{10,}",hint:"Slack token detected. Revoke it in the Slack app settings."},{id:"slack-webhook",subkind:"slack_webhook",name:"Slack Webhook",severity:"high",pattern:"hooks\\.slack\\.com/services/T[0-9A-Z]{8,}/B[0-9A-Z]{8,}/[0-9a-zA-Z]{24}",hint:"Slack incoming-webhook URL detected. Regenerate it."},{id:"twilio-api-key",subkind:"twilio_api_key",name:"Twilio API Key",severity:"high",pattern:"SK[0-9a-fA-F]{32}",hint:"Twilio API key detected. Rotate it in the Twilio console."},{id:"sendgrid-api-key",subkind:"sendgrid_api_key",name:"SendGrid API Key",severity:"critical",pattern:"SG\\.[0-9a-zA-Z_-]{22}\\.[0-9a-zA-Z_-]{43}",hint:"SendGrid API key detected. Rotate it in the SendGrid console."},{id:"postgres-uri",subkind:"postgres_uri",name:"PostgreSQL Connection String",severity:"critical",pattern:`postgres(?:ql)?://[^\\s'":/@]*:[^\\s'"@]+@[^\\s'"]+`,hint:"PostgreSQL connection string WITH credentials detected. Move it to a secret manager and rotate the password."},{id:"mongodb-uri",subkind:"mongodb_uri",name:"MongoDB Connection String",severity:"critical",pattern:`mongodb(?:\\+srv)?://[^\\s'":/@]*:[^\\s'"@]+@[^\\s'"]+`,hint:"MongoDB connection string WITH credentials detected. Move it to a secret manager and rotate the password."},{id:"redis-uri",subkind:"redis_uri",name:"Redis Connection String",severity:"high",pattern:`redis(?:s)?://[^\\s'":/@]*:[^\\s'"@]+@[^\\s'"]+`,hint:"Redis connection string WITH credentials detected. Move it to a secret manager and rotate the password."},{id:"openai-key",subkind:"openai_key",name:"OpenAI API Key",severity:"critical",pattern:"sk-[0-9a-zA-Z]{20,}T3BlbkFJ[0-9a-zA-Z]{20,}",hint:"OpenAI API key detected. Rotate at https://platform.openai.com/api-keys."},{id:"anthropic-key",subkind:"anthropic_key",name:"Anthropic API Key",severity:"critical",pattern:"sk-ant-[0-9a-zA-Z_-]{40,}",hint:"Anthropic API key detected. Rotate at https://console.anthropic.com/."},{id:"firebase-key",subkind:"firebase_key",name:"Firebase API Key",severity:"high",pattern:"AIza[0-9A-Za-z_-]{35}",hint:"Firebase API key detected. Restrict it in the Firebase console."},{id:"supabase-key",subkind:"supabase_key",name:"Supabase Service Key",severity:"critical",pattern:"eyJ[0-9a-zA-Z_-]{100,}",hint:"Long JWT (possible Supabase service key) detected. Rotate it and keep it server-side only."},{id:"private-key",subkind:"private_key",name:"Private Key",severity:"critical",pattern:"-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----",hint:"Private key material in plaintext. Rotate immediately and move to a key manager (KMS/Vault).",skipPlaceholder:!0},{id:"jwt-secret",subkind:"jwt_secret",name:"JWT/Generic Secret",severity:"high",pattern:`(?:jwt_secret|JWT_SECRET|secret_key|SECRET_KEY|api_secret|API_SECRET)\\s*[=:]\\s*['"][^'"]{8,}['"]`,hint:"Hardcoded signing/API secret detected. Move it to an environment variable and rotate it."},{id:"password-in-code",subkind:"password_in_code",name:"Password in Code",severity:"high",pattern:`(?:password|passwd|pwd)\\s*[=:]\\s*['"][^'"]{8,}['"]`,hint:"Hardcoded password detected. Move it to a secret manager and rotate it."},{id:"bearer-token",subkind:"bearer_token",name:"Bearer Token in Code",severity:"high",pattern:`['"]Bearer\\s+[0-9a-zA-Z._-]{20,}['"]`,hint:"Hardcoded bearer token detected. Move it to a secret manager and rotate it."},{id:"hex-secret-32",subkind:"hex_secret",name:"Hardcoded 32+ Hex Secret",severity:"medium",pattern:`['"][0-9a-f]{32,}['"]`,hint:"Long hex string that looks like a secret/hash. Confirm it is not a live credential."},{id:"base64-secret",subkind:"base64_secret",name:"Hardcoded Base64 Secret (long)",severity:"medium",pattern:`['"][A-Za-z0-9+/]{64,}={0,2}['"]`,hint:"Long base64 blob that looks like an embedded secret. Confirm it is not a live credential."}]};var tl=[{pattern:/^(full_?name|first_?name|last_?name|spouse_?name|beneficiary_?name)$/i,type:"name",label:"Person name",labelHe:"\u05E9\u05DD \u05D0\u05D3\u05DD"},{pattern:/^(email|e_?mail|email_?address)$/i,type:"email",label:"Email address",labelHe:"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC"},{pattern:/^(phone|mobile|telephone|phone_?number|cell_?phone)$/i,type:"phone",label:"Phone number",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05D8\u05DC\u05E4\u05D5\u05DF"},{pattern:/^(id_?number|identity|ssn|social_?security|national_?id|teudat_?zehut)$/i,type:"id",label:"ID number",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05DE\u05D6\u05D4\u05D4"},{pattern:/^(address|street_?address|home_?address)$/i,type:"address",label:"Address",labelHe:"\u05DB\u05EA\u05D5\u05D1\u05EA"},{pattern:/^(date_?of_?birth|dob|birth_?date|birthday)$/i,type:"dob",label:"Date of birth",labelHe:"\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4"},{pattern:/^(bank_?account|iban|account_?number|bank_?details|routing_?number)$/i,type:"financial",label:"Bank account",labelHe:"\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7"},{pattern:/^(credit_?card|card_?number|cvv|cc_?number)$/i,type:"financial",label:"Credit card",labelHe:"\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9"},{pattern:/^(salary|income|commission|premium|compensation)$/i,type:"financial",label:"Financial data",labelHe:"\u05E0\u05EA\u05D5\u05DF \u05E4\u05D9\u05E0\u05E0\u05E1\u05D9"},{pattern:/^(medical_?info|health_?conditions|diagnosis|medication)$/i,type:"medical",label:"Medical data",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9"},{pattern:/^(ip_?address)$/i,type:"tracking",label:"IP address",labelHe:"\u05DB\u05EA\u05D5\u05D1\u05EA IP"},{pattern:/^(passport|passport_?number|passport_?id)$/i,type:"id",label:"Passport number",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05D3\u05E8\u05DB\u05D5\u05DF"},{pattern:/^(driver_?license|drivers_?license|dl_?number)$/i,type:"id",label:"Driver license",labelHe:"\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF \u05E0\u05D4\u05D9\u05D2\u05D4"},{pattern:/^(iban|swift_?code|bic)$/i,type:"financial",label:"Banking code",labelHe:"\u05E7\u05D5\u05D3 \u05D1\u05E0\u05E7\u05D0\u05D9"},{pattern:/^(tax_?id|tin|vat_?number|ein)$/i,type:"financial",label:"Tax ID",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05DE\u05E1"},{pattern:/^(insurance_?number|policy_?number|member_?id)$/i,type:"id",label:"Insurance/Member ID",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05D1\u05D9\u05D8\u05D5\u05D7/\u05D7\u05D1\u05E8"},{pattern:/^(blood_?type|allergy|allergies|prescription)$/i,type:"medical",label:"Medical data",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9"},{pattern:/^(biometric|fingerprint|face_?id|retina)$/i,type:"biometric",label:"Biometric data",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05D1\u05D9\u05D5\u05DE\u05D8\u05E8\u05D9"},{pattern:/^(latitude|longitude|lat|lng|geo_?location|coordinates)$/i,type:"location",label:"Geolocation",labelHe:"\u05DE\u05D9\u05E7\u05D5\u05DD \u05D2\u05D9\u05D0\u05D5\u05D2\u05E8\u05E4\u05D9"},{pattern:/^(mac_?address|device_?fingerprint|imei|serial_?number)$/i,type:"tracking",label:"Device identifier",labelHe:"\u05DE\u05D6\u05D4\u05D4 \u05DE\u05DB\u05E9\u05D9\u05E8"},{pattern:/^(ethnicity|race|religion|political_?affiliation|sexual_?orientation)$/i,type:"sensitive_personal",label:"Sensitive personal",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05D0\u05D9\u05E9\u05D9 \u05E8\u05D2\u05D9\u05E9"},{pattern:/^(minor|child_?name|child_?age|dependent)$/i,type:"minor_data",label:"Minor data",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05E2\u05DC \u05E7\u05D8\u05D9\u05E0\u05D9\u05DD"},{pattern:/^(signature|digital_?signature)$/i,type:"id",label:"Signature",labelHe:"\u05D7\u05EA\u05D9\u05DE\u05D4"},{pattern:/^(vehicle_?number|license_?plate|plate_?number)$/i,type:"tracking",label:"Vehicle ID",labelHe:"\u05DE\u05D6\u05D4\u05D4 \u05E8\u05DB\u05D1"}],nl=/^(id|uuid|created_?at|updated_?at|deleted_?at|status|type|category|description|title|slug|url|path|key|value|sort_?order|position|enabled|active|public|version|metadata|config|settings|options|data|content|body|raw|json|text|note|comment|label|color|icon|image|avatar|logo|thumbnail|preview|template|schema|format|mode|level|priority|severity|source|target|parent|child|owner|creator|modifier|assignee|project|workspace|organization|team|group|channel|thread|room|session|device|platform|browser|locale|timezone|currency|country|region|city|zip|postal|state|province|name|display_?name|user_?agent|password_?hash|secret|token|private_?key|auth_?token|constraint|index|sequence|trigger|function|procedure|database|namespace|migration|revision)$/i,rl=/^(beacon_?registr|device_?config|hardware|sensor|firmware|telemetry|metric|analytic|log_?event|audit_?log|system_?config|cache|queue|job|migration|schema_?version|spatial_?ref)/i,sl=/^(minor|major|uuid|rssi|tx_?power|beacon_?id|device_?type|firmware_?version|batch_?id|zone_?id)$/i;function Rs(e,t){if(nl.test(e)||/^name$/i.test(e)||t&&rl.test(t)||sl.test(e))return null;for(let n of tl)if(n.pattern.test(e))return n.type;let r=Ss(e);return r?r.type:null}var Pp=we.rules.map(e=>({id:e.id,name:e.name,pattern:new RegExp(e.pattern),severity:e.severity}));var Lp=512*1024,Np=50*1024*1024;var il=new Set(["hex-secret-32","base64-secret"]),zp=we.rules.filter(e=>!il.has(e.id)).map(e=>new RegExp(e.pattern,"g"));var Cs={id:"critical",agent_id:"high",policy:"high",financial:"critical",medical:"critical",sensitive_personal:"critical",minor_data:"critical",biometric:"critical",auth:"critical",name:"high",email:"high",phone:"high",address:"high",dob:"high",location:"high",tracking:"medium",employment:"high",education:"medium",behavior:"high"};function Ps(e){return Cs[e]}function ol(e){return Cs[e]??"low"}function Ls(e,t){let r=[];for(let n of t){let s=n.rows.length;for(let i=0;i<n.headers.length;i++){let o=n.headers[i]??"",a=o?Rs(o.trim().replace(/["'`׳״:]/g,"").replace(/\s+/g,"_"),n.name)??_t(o)?.type??null:null,c=[];for(let p of n.rows){let d=p[i];typeof d=="string"&&d.length>0&&c.push(d)}let l=c.length>0?Es(c):null;l?r.push(Ts(e,n.name,o,l.type,l.label,"value",l.matchedSample,s)):a&&r.push(Ts(e,n.name,o,a,xt(a),"header",0,s))}}return r}function Ts(e,t,r,n,s,i,o,a){return{file:e,location:t,column:r,type:n,label:s,category:xt(n),severity:ol(n),matchKind:i,hits:o,sampleSize:a}}var al=new Set(["hex-secret-32","base64-secret"]),cl=[/(?:[$€£]|USD|EUR|GBP)\s?\d[\d,]*(?:\.\d+)?/g,/\d[\d,]*(?:\.\d+)?\s?(?:[$€£]|USD|EUR|GBP|דולר|יורו)/g,/\b\d{1,3}(?:,\d{3})+(?:\.\d+)?\b/g];function ll(e){let t=new xe(["financial_amount"]);return{kind:"amount",severity:"medium",hint:"A money amount (the amounts dial is on: amounts are treated as sensitive here).",find:r=>{if(!e())return[];let n=t.detect(r).map(i=>({start:i.startIndex,end:i.endIndex}));for(let i of cl){i.lastIndex=0;for(let o of r.matchAll(i))n.push({start:o.index,end:o.index+o[0].length})}n.sort((i,o)=>i.start-o.start||o.end-i.end);let s=[];for(let i of n){let o=s[s.length-1];o&&i.start<o.end?o.end=Math.max(o.end,i.end):s.push({...i})}return s}}}function Ns(e={}){let t=e.amounts??(()=>!1),r=[...Is(),ll(t)],n=we.rules.filter(s=>!al.has(s.id)).map(s=>({id:s.id,name:s.name,severity:s.severity,pattern:new RegExp(s.pattern)}));return{text:r,amounts:t,header:s=>{let i=_t(s);return i?{type:i.type,label:i.labelHe||i.label}:null},secrets:n,table:s=>Ls("",[s]).filter(i=>i.column).map(i=>({column:i.column,type:i.type,category:i.category,severity:i.severity,hits:i.hits,how:i.matchKind==="value"?"value":"header"})),severity:s=>Ps(s)}}var Os=!1;function Ds(){Os||(Os=!0,wt(Ns({amounts:Ir})))}Ds();xs(process.argv.slice(2)).catch(()=>{process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"ask",permissionDecisionReason:"NoData could not check this file before it is read. Allow anyway?"}}))});
72
+ `)});g.first&&g.value&&process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:"PostToolUse",additionalContext:g.value}}));return}let h=await un(d,"pre",()=>Wc(c,a.tool_input??{},a.cwd??process.cwd(),t,Xc(l,a),a.session_id,f)),p=h.value;p.decision!=="allow"&&(h.first&&Vc(c,p),process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:p.decision,permissionDecisionReason:p.reason}})))}var Zc="claude-code",zp=` --host ${Zc}`;var Yc=[{type:"id_number",patterns:[/\b\d{9}\b/g,/ת\.?ז\.?\s*:?\s*(\d{9})/g,/זהות\s*:?\s*(\d{9})/g],confidence:.9,replacement:()=>"[\u05EA.\u05D6. \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"phone",patterns:[/\b0[2-9]\d[\s\-]?\d{7}\b/g,/\b05[0-9][\s\-]?\d{7}\b/g,/\+972[\s\-]?[2-9]\d[\s\-]?\d{7}\b/g],confidence:.95,replacement:()=>"[\u05D8\u05DC\u05E4\u05D5\u05DF \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"email",patterns:[/[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}/g],confidence:.99,replacement:e=>{let[,t]=e.split("@");return`[\u05D0\u05D9\u05DE\u05D9\u05D9\u05DC: ***@${t}]`}},{type:"full_name",patterns:[/(?:לקוח|מטופל|מועמד|שם|נהג|מבוטח|תובע|נתבע|שוכר|מחזיק)[:\s]+([א-ת][א-ת"'\-\s]{2,30}?)(?=[,\n\d]|ת\.ז)/g,/(?:עו"ד|ד"ר|פרופ'|מר|גברת)\s+([א-ת][א-ת"'\-\s]{2,25}?)(?=[,\n])/g],confidence:.75,replacement:()=>"[\u05E9\u05DD \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"bank_account",patterns:[/\b\d{2}[\-]\d{5,9}[\-]\d{2,3}\b/g,/(?:חשבון|ח-ן)\s*:?\s*(\d[\d\-]{8,15})/g],confidence:.88,replacement:()=>"[\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7 \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"medical",patterns:[/(?<![א-ת])[בהוכלמש]{0,2}(?:סוכרת|יתר לחץ דם|אסתמה|דיכאון|חרדה|סרטן|אי ספיקת לב|אפילפסיה)(?![א-ת])/g,/\b(?:Metformin|Lisinopril|Atorvastatin|Amlodipine|Sertraline|Fluoxetine|Omeprazole|Warfarin|Aspirin|Insulin)\b/gi,/\bHbA1c\s*:?\s*[\d.]+%?/g,/\bBMI\s*:?\s*[\d.]+/g,/(?<![א-ת])[בהוכלמש]{0,2}אבחנ[הות]\s*:?\s*[^,\n.]{2,40}/g,/\b(?:Diagnosis|diagnosed\s+with)\s*:?\s*[^,\n.]{2,40}/gi,/\b(?:(?:type\s*[12]\s+)?diabetes(?:\s+mellitus)?|hypertension|asthma|epilepsy|schizophrenia|bipolar\s+disorder|HIV|hepatitis(?:\s+[A-C]\b)?|heart\s+failure|COPD|multiple\s+sclerosis|Crohn'?s\s+disease)\b/gi,/(?<![א-ת])[בהוכלמש]{0,2}(?:אינסולין|מטפורמין|אספירין|קומדין|אומפרדקס|פרוזק|ציפרלקס|אטורבסטטין|אמלודיפין)(?![א-ת])/g],confidence:.85,replacement:()=>"[\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9 \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"financial_amount",patterns:[/[\d,]+(?:\.\d{2})?\s*(?:₪|ש"ח|NIS|שקל(?:ים)?)/g,/(?:₪|NIS)\s*[\d,]+(?:\.\d{2})?/g],confidence:.92,replacement:()=>"[\u05E1\u05DB\u05D5\u05DD \u05DB\u05E1\u05E4\u05D9 \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"birth_date",patterns:[/(?:תאריך לידה|נולד|נולדה|ד\.ל\.)\s*:?\s*\d{1,2}[\/\.\-]\d{1,2}[\/\.\-]\d{2,4}/g,/(?<![א-ת])[בהוכלמש]{0,2}גיל\s*:?\s*\d{1,3}\b/g],confidence:.88,replacement:()=>"[\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4 \u05DE\u05D5\u05E1\u05EA\u05E8]"},{type:"address",patterns:[/רחוב\s+[א-ת][א-ת\s"'\-]{2,30}\s+\d{1,5}/g,/(?:רח'|רח\.)\s+[א-ת][א-ת\s"'\-]{2,30}\d{1,5}/g],confidence:.72,replacement:()=>"[\u05DB\u05EA\u05D5\u05D1\u05EA \u05DE\u05D5\u05E1\u05EA\u05E8\u05EA]"},{type:"license_plate",patterns:[/\b\d{2,3}[\-]\d{2,3}[\-]\d{2,3}\b/g],confidence:.8,replacement:()=>"[\u05DC\u05D5\u05D7\u05D9\u05EA \u05E8\u05D9\u05E9\u05D5\u05D9 \u05DE\u05D5\u05E1\u05EA\u05E8\u05EA]"}];function Jc(e){if(e.length!==9)return!1;let t=e.split("").map(Number),r=0;for(let n=0;n<9;n++){let s=t[n]*(n%2===0?1:2);s>9&&(s-=9),r+=s}return r%10===0}var xe=class{constructor(t){this.enabledTypes=new Set(t)}detect(t){let r=[],n=new Set;for(let i of Yc)if(this.enabledTypes.has(i.type))for(let o of i.patterns){let a=new RegExp(o.source,o.flags),c;for(;(c=a.exec(t))!==null;){let l=c[0],f=`${i.type}:${c.index}`;if(!n.has(f)){if(n.add(f),i.type==="id_number"){let d=l.replace(/\D/g,"");if(/^\d{9}$/.test(l)&&d.length===9&&!Jc(d))continue}r.push({type:i.type,value:l,startIndex:c.index,endIndex:c.index+l.length,confidence:i.confidence,replacement:i.replacement(l,i.type)})}}}r.sort((i,o)=>i.startIndex-o.startIndex||o.confidence-i.confidence);let s=[];for(let i of r)s.some(a=>i.startIndex<a.endIndex&&i.endIndex>a.startIndex)||s.push(i);return s}};var C=["GDPR","CPRA","PPL"],qc=["GDPR-9","CPRA","PPL"],Qc=[{id:"person_name",type:"name",sensitivity:"high",regulations:[...C],en:["firstname","lastname","fname","lname","middle name","maiden name","birth name","preferred name","display name","nickname","surname","given name","full name"],he:["\u05E9\u05DD \u05E4\u05E8\u05D8\u05D9","\u05E9\u05DD \u05DE\u05E9\u05E4\u05D7\u05D4","\u05E9\u05DD \u05DE\u05DC\u05D0","\u05DB\u05D9\u05E0\u05D5\u05D9","\u05E9\u05DD \u05E0\u05E2\u05D5\u05E8\u05D9\u05DD"],ar:["\u0627\u0644\u0627\u0633\u0645","\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0626\u0644\u0629","\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0643\u0627\u0645\u0644"],ru:["\u0438\u043C\u044F","\u0444\u0430\u043C\u0438\u043B\u0438\u044F","\u043E\u0442\u0447\u0435\u0441\u0442\u0432\u043E","\u0444\u0438\u043E"]},{id:"birth_place",type:"location",sensitivity:"medium",regulations:[...C],en:["birth place","birthplace","place of birth"],he:["\u05DE\u05E7\u05D5\u05DD \u05DC\u05D9\u05D3\u05D4","\u05D0\u05E8\u05E5 \u05DC\u05D9\u05D3\u05D4"],ar:["\u0645\u0643\u0627\u0646 \u0627\u0644\u0645\u064A\u0644\u0627\u062F"],ru:["\u043C\u0435\u0441\u0442\u043E \u0440\u043E\u0436\u0434\u0435\u043D\u0438\u044F"]},{id:"citizenship",type:"sensitive_personal",sensitivity:"high",regulations:[...C],en:["citizenship","nationality"],he:["\u05D0\u05D6\u05E8\u05D7\u05D5\u05EA","\u05DC\u05D0\u05D5\u05DD"],ar:["\u0627\u0644\u062C\u0646\u0633\u064A\u0629"],ru:["\u0433\u0440\u0430\u0436\u0434\u0430\u043D\u0441\u0442\u0432\u043E"]},{id:"marital_status",type:"sensitive_personal",sensitivity:"high",regulations:[...C],en:["marital status"],he:["\u05DE\u05E6\u05D1 \u05DE\u05E9\u05E4\u05D7\u05EA\u05D9"],ar:["\u0627\u0644\u062D\u0627\u0644\u0629 \u0627\u0644\u0627\u062C\u062A\u0645\u0627\u0639\u064A\u0629"],ru:["\u0441\u0435\u043C\u0435\u0439\u043D\u043E\u0435 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435"]},{id:"government_id",type:"id",sensitivity:"critical",regulations:[...C],en:["ssn","national id","passport","driver license","drivers license","tax id","social security","national insurance","military id","voter id","resident id","residence permit","visa number"],he:["\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA","\u05D3\u05E8\u05DB\u05D5\u05DF","\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF \u05E0\u05D4\u05D9\u05D2\u05D4","\u05DE\u05E1\u05E4\u05E8 \u05D1\u05D9\u05D8\u05D5\u05D7 \u05DC\u05D0\u05D5\u05DE\u05D9","\u05DE\u05E1\u05E4\u05E8 \u05D0\u05D9\u05E9\u05D9","\u05DE\u05E1\u05E4\u05E8 \u05D5\u05D9\u05D6\u05D4","\u05EA\u05E2\u05D5\u05D3\u05EA \u05EA\u05D5\u05E9\u05D1","\u05DE\u05E1\u05E4\u05E8 \u05E2\u05D5\u05E1\u05E7"],ar:["\u0631\u0642\u0645 \u0627\u0644\u0647\u0648\u064A\u0629","\u062C\u0648\u0627\u0632 \u0627\u0644\u0633\u0641\u0631","\u0631\u062E\u0635\u0629 \u0627\u0644\u0642\u064A\u0627\u062F\u0629"],ru:["\u043F\u0430\u0441\u043F\u043E\u0440\u0442","\u0441\u043D\u0438\u043B\u0441","\u0438\u043D\u043D","\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0435 \u0443\u0434\u043E\u0441\u0442\u043E\u0432\u0435\u0440\u0435\u043D\u0438\u0435"]},{id:"institution_person_id",type:"tracking",sensitivity:"medium",regulations:[...C],en:["employee id","employee number","employee no","student id","student number","user id","userid","customer id","customer number","customer no","client id","member id","subscriber id","participant id","profile id","person id","person uuid","lead id","crm contact","account id"],he:["\u05DE\u05E1\u05E4\u05E8 \u05E2\u05D5\u05D1\u05D3","\u05DE\u05E1\u05E4\u05E8 \u05E1\u05D8\u05D5\u05D3\u05E0\u05D8","\u05DE\u05E1\u05E4\u05E8 \u05DC\u05E7\u05D5\u05D7","\u05DE\u05D6\u05D4\u05D4 \u05DC\u05E7\u05D5\u05D7","\u05DE\u05E1\u05E4\u05E8 \u05DE\u05E0\u05D5\u05D9","\u05DE\u05D6\u05D4\u05D4 \u05DE\u05E9\u05EA\u05DE\u05E9"],ar:["\u0631\u0642\u0645 \u0627\u0644\u0645\u0648\u0638\u0641","\u0631\u0642\u0645 \u0627\u0644\u0639\u0645\u064A\u0644"],ru:["\u0442\u0430\u0431\u0435\u043B\u044C\u043D\u044B\u0439 \u043D\u043E\u043C\u0435\u0440","\u043D\u043E\u043C\u0435\u0440 \u043A\u043B\u0438\u0435\u043D\u0442\u0430"]},{id:"patient_id",type:"medical",sensitivity:"critical",regulations:["GDPR-9","HIPAA","PPL"],en:["patient id","patient number","mrn","medical record number"],he:["\u05DE\u05E1\u05E4\u05E8 \u05DE\u05D8\u05D5\u05E4\u05DC","\u05DE\u05E1\u05E4\u05E8 \u05EA\u05D9\u05E7 \u05E8\u05E4\u05D5\u05D0\u05D9"],ar:["\u0631\u0642\u0645 \u0627\u0644\u0645\u0631\u064A\u0636"],ru:["\u043D\u043E\u043C\u0435\u0440 \u043F\u0430\u0446\u0438\u0435\u043D\u0442\u0430"]},{id:"email",type:"email",sensitivity:"high",regulations:[...C],en:["emailaddress","e mail","recovery email","contact email"],he:["\u05D3\u05D5\u05D0\u05DC","\u05D0\u05D9\u05DE\u05D9\u05D9\u05DC"],ar:["\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A"],ru:["\u043F\u043E\u0447\u0442\u0430","\u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u043E\u0447\u0442\u0430","email"]},{id:"phone",type:"phone",sensitivity:"high",regulations:[...C],en:["cellphone","contact number","work phone","home phone","whatsapp","recovery phone","telephone"],he:["\u05D8\u05DC\u05E4\u05D5\u05DF \u05D1\u05D9\u05EA","\u05D8\u05DC\u05E4\u05D5\u05DF \u05E2\u05D1\u05D5\u05D3\u05D4","\u05D5\u05D5\u05D8\u05E1\u05D0\u05E4","\u05DE\u05E1\u05E4\u05E8 \u05E0\u05D9\u05D9\u05D3"],ar:["\u0647\u0627\u062A\u0641","\u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062A\u0641","\u062C\u0648\u0627\u0644"],ru:["\u0442\u0435\u043B\u0435\u0444\u043E\u043D","\u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0439"]},{id:"social_handle",type:"tracking",sensitivity:"medium",regulations:[...C],en:["telegram","linkedin","facebook","twitter","instagram","tiktok","social profile"],he:["\u05D8\u05DC\u05D2\u05E8\u05DD","\u05DC\u05D9\u05E0\u05E7\u05D3\u05D0\u05D9\u05DF","\u05E4\u05D9\u05D9\u05E1\u05D1\u05D5\u05E7","\u05D0\u05D9\u05E0\u05E1\u05D8\u05D2\u05E8\u05DD"]},{id:"address",type:"address",sensitivity:"high",regulations:[...C],en:["house number","apartment","apt","billing address","shipping address","postal code","zip code","postcode","street"],he:["\u05DE\u05E1\u05E4\u05E8 \u05D1\u05D9\u05EA","\u05D3\u05D9\u05E8\u05D4","\u05DB\u05EA\u05D5\u05D1\u05EA \u05DC\u05DE\u05E9\u05DC\u05D5\u05D7","\u05DB\u05EA\u05D5\u05D1\u05EA \u05DC\u05D7\u05D9\u05D5\u05D1","\u05EA.\u05D3","\u05EA\u05D0 \u05D3\u05D5\u05D0\u05E8"],ar:["\u0627\u0644\u0639\u0646\u0648\u0627\u0646","\u0627\u0644\u0634\u0627\u0631\u0639","\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0628\u0631\u064A\u062F\u064A"],ru:["\u0430\u0434\u0440\u0435\u0441","\u0443\u043B\u0438\u0446\u0430","\u0438\u043D\u0434\u0435\u043A\u0441","\u043A\u0432\u0430\u0440\u0442\u0438\u0440\u0430"]},{id:"geo",type:"location",sensitivity:"high",regulations:[...C],en:["geo location","geolocation","latitude","longitude","coordinates","home location","current location"],he:["\u05DE\u05D9\u05E7\u05D5\u05DD","\u05E7\u05D5\u05D0\u05D5\u05E8\u05D3\u05D9\u05E0\u05D8\u05D5\u05EA"],ar:["\u0627\u0644\u0645\u0648\u0642\u0639"],ru:["\u043C\u0435\u0441\u0442\u043E\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435","\u043A\u043E\u043E\u0440\u0434\u0438\u043D\u0430\u0442\u044B"]},{id:"bank_card",type:"financial",sensitivity:"critical",regulations:[...C],en:["bank account","iban","swift","bic","routing number","credit card","creditcard","card number","cvv","card expiry","cc exp","paypal","wallet address","crypto wallet","bitcoin address"],he:["\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7","\u05DE\u05E1\u05E4\u05E8 \u05D7\u05E9\u05D1\u05D5\u05DF","\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9","\u05D0\u05E8\u05E0\u05E7 \u05E7\u05E8\u05D9\u05E4\u05D8\u05D5","\u05D0\u05E8\u05E0\u05E7 \u05D3\u05D9\u05D2\u05D9\u05D8\u05DC\u05D9"],ar:["\u062D\u0633\u0627\u0628 \u0628\u0646\u0643\u064A","\u0631\u0642\u0645 \u0627\u0644\u062D\u0633\u0627\u0628","\u0628\u0637\u0627\u0642\u0629 \u0627\u0626\u062A\u0645\u0627\u0646"],ru:["\u0440\u0430\u0441\u0447\u0435\u0442\u043D\u044B\u0439 \u0441\u0447\u0435\u0442","\u043D\u043E\u043C\u0435\u0440 \u0441\u0447\u0435\u0442\u0430","\u043D\u043E\u043C\u0435\u0440 \u043A\u0430\u0440\u0442\u044B","\u043A\u0440\u0435\u0434\u0438\u0442\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u0430"]},{id:"income_tax",type:"financial",sensitivity:"high",regulations:[...C],en:["salary","income","wage","tax record","tax return","payment history","credit score","net worth","salary grade"],he:["\u05E9\u05DB\u05E8","\u05DE\u05E9\u05DB\u05D5\u05E8\u05EA","\u05D4\u05DB\u05E0\u05E1\u05D4","\u05EA\u05DC\u05D5\u05E9 \u05E9\u05DB\u05E8","\u05D3\u05D5\u05D7 \u05DE\u05E1","\u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D9\u05EA \u05EA\u05E9\u05DC\u05D5\u05DE\u05D9\u05DD","\u05D3\u05D9\u05E8\u05D5\u05D2 \u05D0\u05E9\u05E8\u05D0\u05D9","\u05E9\u05D5\u05D5\u05D9 \u05E0\u05E7\u05D9","\u05D3\u05E8\u05D2\u05EA \u05E9\u05DB\u05E8"],ar:["\u0627\u0644\u0631\u0627\u062A\u0628","\u0627\u0644\u062F\u062E\u0644"],ru:["\u0437\u0430\u0440\u043F\u043B\u0430\u0442\u0430","\u0434\u043E\u0445\u043E\u0434"]},{id:"assets",type:"financial",sensitivity:"high",regulations:[...C],en:["property id","land record","ownership record","title deed","holdings"],he:["\u05D2\u05D5\u05E9 \u05D7\u05DC\u05E7\u05D4","\u05E0\u05E1\u05D7 \u05D8\u05D0\u05D1\u05D5","\u05E8\u05D9\u05E9\u05D5\u05DD \u05DE\u05E7\u05E8\u05E7\u05E2\u05D9\u05DF","\u05D1\u05E2\u05DC\u05D5\u05EA","\u05D0\u05D7\u05D6\u05E7\u05D5\u05EA"],ru:["\u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0441\u0442\u044C","\u043D\u0435\u0434\u0432\u0438\u0436\u0438\u043C\u043E\u0441\u0442\u044C"]},{id:"vehicle",type:"tracking",sensitivity:"medium",regulations:[...C],en:["vin","vehicle id","license plate","registration number","plate number"],he:["\u05DE\u05E1\u05E4\u05E8 \u05E9\u05DC\u05D3\u05D4","\u05DE\u05E1\u05E4\u05E8 \u05E8\u05DB\u05D1","\u05DC\u05D5\u05D7\u05D9\u05EA \u05E8\u05D9\u05E9\u05D5\u05D9"],ru:["\u043D\u043E\u043C\u0435\u0440 \u0430\u0432\u0442\u043E\u043C\u043E\u0431\u0438\u043B\u044F","vin"]},{id:"health",type:"medical",sensitivity:"critical",regulations:["GDPR-9","HIPAA","PPL"],en:["medical record","health condition","health data","lab result","lab results","vaccination","mental health","hospitalization","hospitalisation","disability","insurance number","diagnosis","allergy","prescription","medication","blood type"],he:["\u05EA\u05D9\u05E7 \u05E8\u05E4\u05D5\u05D0\u05D9","\u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05DE\u05E2\u05D1\u05D3\u05D4","\u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05D1\u05D3\u05D9\u05E7\u05D4","\u05D7\u05D9\u05E1\u05D5\u05E0\u05D9\u05DD","\u05D1\u05E8\u05D9\u05D0\u05D5\u05EA \u05E0\u05E4\u05E9","\u05D0\u05E9\u05E4\u05D5\u05D6","\u05E0\u05DB\u05D5\u05EA","\u05DE\u05E6\u05D1 \u05D1\u05E8\u05D9\u05D0\u05D5\u05EA\u05D9"],ar:["\u0627\u0644\u062A\u0634\u062E\u064A\u0635","\u0627\u0644\u0633\u062C\u0644 \u0627\u0644\u0637\u0628\u064A","\u0627\u0644\u0623\u062F\u0648\u064A\u0629"],ru:["\u0434\u0438\u0430\u0433\u043D\u043E\u0437","\u043C\u0435\u0434\u0438\u0446\u0438\u043D\u0441\u043A\u0430\u044F \u043A\u0430\u0440\u0442\u0430","\u0430\u043D\u0430\u043B\u0438\u0437\u044B"]},{id:"biometric",type:"biometric",sensitivity:"critical",regulations:["GDPR-9","CPRA","PPL"],en:["face embedding","face scan","iris scan","retina scan","voice print","voiceprint","voice signature","hand geometry","biometric template","biometric data","dna","genetic data","genome"],he:["\u05D8\u05D1\u05D9\u05E2\u05EA \u05E7\u05D5\u05DC","\u05E1\u05E8\u05D9\u05E7\u05EA \u05E4\u05E0\u05D9\u05DD","\u05E1\u05E8\u05D9\u05E7\u05EA \u05E7\u05E9\u05EA\u05D9\u05EA","\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05D2\u05E0\u05D8\u05D9\u05D9\u05DD",'\u05D3\u05E0"\u05D0'],ar:["\u0628\u0635\u0645\u0629"],ru:["\u0431\u0438\u043E\u043C\u0435\u0442\u0440\u0438\u044F","\u043E\u0442\u043F\u0435\u0447\u0430\u0442\u043E\u043A"]},{id:"employment",type:"employment",sensitivity:"medium",regulations:[...C],en:["employer","job title","employment status","hire date","start date of employment","termination date","performance review","disciplinary"],he:["\u05DE\u05E2\u05E1\u05D9\u05E7","\u05DE\u05E7\u05D5\u05DD \u05E2\u05D1\u05D5\u05D3\u05D4","\u05EA\u05E4\u05E7\u05D9\u05D3 \u05D4\u05E2\u05D5\u05D1\u05D3","\u05EA\u05D0\u05E8\u05D9\u05DA \u05EA\u05D7\u05D9\u05DC\u05EA \u05E2\u05D1\u05D5\u05D3\u05D4","\u05EA\u05D0\u05E8\u05D9\u05DA \u05E1\u05D9\u05D5\u05DD \u05E2\u05D1\u05D5\u05D3\u05D4","\u05D4\u05E2\u05E8\u05DB\u05EA \u05D1\u05D9\u05E6\u05D5\u05E2\u05D9\u05DD","\u05E9\u05D9\u05DE\u05D5\u05E2"],ar:["\u062C\u0647\u0629 \u0627\u0644\u0639\u0645\u0644","\u0627\u0644\u0645\u0633\u0645\u0649 \u0627\u0644\u0648\u0638\u064A\u0641\u064A"],ru:["\u0440\u0430\u0431\u043E\u0442\u043E\u0434\u0430\u0442\u0435\u043B\u044C","\u0434\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C"]},{id:"manager",type:"name",sensitivity:"medium",regulations:[...C],en:["manager","supervisor"],he:["\u05DE\u05E0\u05D4\u05DC \u05D9\u05E9\u05D9\u05E8"]},{id:"education",type:"education",sensitivity:"medium",regulations:[...C],en:["school","university","college","degree","transcript","education history","gpa"],he:["\u05D1\u05D9\u05EA \u05E1\u05E4\u05E8","\u05D0\u05D5\u05E0\u05D9\u05D1\u05E8\u05E1\u05D9\u05D8\u05D4","\u05DE\u05DB\u05DC\u05DC\u05D4","\u05D2\u05D9\u05DC\u05D9\u05D5\u05DF \u05E6\u05D9\u05D5\u05E0\u05D9\u05DD","\u05D4\u05E9\u05DB\u05DC\u05D4","\u05EA\u05D5\u05D0\u05E8 \u05D0\u05E7\u05D3\u05DE\u05D9"],ar:["\u0627\u0644\u062C\u0627\u0645\u0639\u0629","\u0627\u0644\u0645\u062F\u0631\u0633\u0629"],ru:["\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0438\u0435","\u0443\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442"]},{id:"device_online",type:"tracking",sensitivity:"medium",regulations:[...C],en:["ip","ipaddress","ip address","mac address","device id","deviceid","advertising id","idfa","gaid","android id","apple id","cookie id","cookieid","browser fingerprint","user agent","imei"],he:["\u05DB\u05EA\u05D5\u05D1\u05EA ip","\u05DE\u05D6\u05D4\u05D4 \u05DE\u05DB\u05E9\u05D9\u05E8"],ru:["ip \u0430\u0434\u0440\u0435\u0441"]},{id:"account",type:"tracking",sensitivity:"medium",regulations:[...C],en:["username","user name","login","screen name"],he:["\u05E9\u05DD \u05DE\u05E9\u05EA\u05DE\u05E9"],ru:["\u043B\u043E\u0433\u0438\u043D"]},{id:"credential",type:"auth",sensitivity:"critical",regulations:[...C],en:["password","password hash","mfa secret","otp secret","security question","security answer","session id","session token","api key"],he:["\u05E1\u05D9\u05E1\u05DE\u05D4","\u05E1\u05D9\u05E1\u05DE\u05D0","\u05E9\u05D0\u05DC\u05EA \u05D0\u05D1\u05D8\u05D7\u05D4"],ar:["\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631"],ru:["\u043F\u0430\u0440\u043E\u043B\u044C"]},{id:"behavior",type:"behavior",sensitivity:"high",regulations:[...C],en:["purchase history","search history","browsing history","clickstream","usage pattern","behavior profile","behaviour profile"],he:["\u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D9\u05EA \u05E8\u05DB\u05D9\u05E9\u05D5\u05EA","\u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D9\u05EA \u05D7\u05D9\u05E4\u05D5\u05E9","\u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D9\u05EA \u05D2\u05DC\u05D9\u05E9\u05D4","\u05E4\u05E8\u05D5\u05E4\u05D9\u05DC \u05D4\u05EA\u05E0\u05D4\u05D2\u05D5\u05EA"]},{id:"special_category",type:"sensitive_personal",sensitivity:"critical",regulations:[...qc],en:["race","ethnicity","religion","political opinion","political party","union membership","trade union","sexual orientation","gender identity","criminal record"],he:["\u05D2\u05D6\u05E2","\u05D3\u05EA","\u05D4\u05E9\u05E7\u05E4\u05D4 \u05E4\u05D5\u05DC\u05D9\u05D8\u05D9\u05EA","\u05D7\u05D1\u05E8\u05D5\u05EA \u05D1\u05D0\u05D9\u05D2\u05D5\u05D3","\u05E0\u05D8\u05D9\u05D9\u05D4 \u05DE\u05D9\u05E0\u05D9\u05EA","\u05D6\u05D4\u05D5\u05EA \u05DE\u05D2\u05D3\u05E8\u05D9\u05EA","\u05E8\u05D9\u05E9\u05D5\u05DD \u05E4\u05DC\u05D9\u05DC\u05D9"],ar:["\u0627\u0644\u062F\u064A\u0627\u0646\u0629","\u0627\u0644\u0639\u0631\u0642"],ru:["\u0440\u0435\u043B\u0438\u0433\u0438\u044F","\u043D\u0430\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u044C"]},{id:"family_names",type:"name",sensitivity:"high",regulations:[...C],en:["mother name","father name","spouse","partner name","emergency contact","next of kin","family member","guardian","beneficiary"],he:["\u05E9\u05DD \u05D4\u05D0\u05DD","\u05E9\u05DD \u05D4\u05D0\u05D1","\u05D1\u05DF \u05D6\u05D5\u05D2","\u05D1\u05EA \u05D6\u05D5\u05D2","\u05D0\u05D9\u05E9 \u05E7\u05E9\u05E8 \u05DC\u05D7\u05D9\u05E8\u05D5\u05DD","\u05E7\u05E8\u05D5\u05D1 \u05DE\u05E9\u05E4\u05D7\u05D4","\u05D0\u05E4\u05D5\u05D8\u05E8\u05D5\u05E4\u05D5\u05E1","\u05DE\u05D5\u05D8\u05D1"],ar:["\u0627\u0633\u0645 \u0627\u0644\u0623\u0645","\u0627\u0633\u0645 \u0627\u0644\u0623\u0628","\u0627\u0644\u0632\u0648\u062C"],ru:["\u0441\u0443\u043F\u0440\u0443\u0433","\u043E\u043F\u0435\u043A\u0443\u043D"]},{id:"children",type:"minor_data",sensitivity:"critical",regulations:[...C],en:["children","child name","dependents","dependants"],he:["\u05D9\u05DC\u05D3\u05D9\u05DD","\u05E9\u05DE\u05D5\u05EA \u05D4\u05D9\u05DC\u05D3\u05D9\u05DD"],ar:["\u0627\u0644\u0623\u0637\u0641\u0627\u0644"],ru:["\u0434\u0435\u0442\u0438"]}];function el(e){return e.trim().toLowerCase().replace(/["'`׳״]/g,"").replace(/[_\-.]+/g," ").replace(/\s+/g," ").trim()}function Es(){return Qc.map(e=>{let t=[...e.en,...e.he??[],...e.ar??[],...e.ru??[]].map(el).filter(Boolean);return{type:e.type,tokens:t.filter(r=>!r.includes(" ")),phrases:t.filter(r=>r.includes(" "))}})}var tl=[{pattern:/^(?:שם|שם_מלא|שם פרטי|שם_פרטי|שם משפחה|שם_משפחה|שם_אדם|שם הלקוח|שם_הלקוח|שם בן זוג|שם בן_זוג|שם המבוטח|שם_המבוטח|שם המוטב|שם_המוטב|שם מבוטח|שם_מבוטח|שם מוטב|שם_מוטב|שם הילד|שם_הילד|שם הקטין|שם_הקטין|firstname_he|lastname_he|shem|shem_mishpacha|shem_prati)$/i,type:"name",label:"Person name (Hebrew)",labelHe:"\u05E9\u05DD \u05D0\u05D3\u05DD"},{pattern:/^(?:ת"ז|ת\.ז|ת ז|תז|תעודת זהות|תעודת_זהות|מספר זהות|מספר_זהות|מס' זהות|מס_זהות|מס' ת"ז|teudat_zehut|tz|t_z|israeli_id|il_id)$/i,type:"id",label:"Israeli ID",labelHe:"\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA"},{pattern:/^(?:דרכון|מספר דרכון|מס דרכון|רישיון נהיגה|רישיון_נהיגה|רשיון נהיגה|מס רישיון|דרכון_מספר)$/i,type:"id",label:"Passport / DL (Hebrew)",labelHe:"\u05D3\u05E8\u05DB\u05D5\u05DF/\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF"},{pattern:/^(?:מייל|דוא"ל|דוא_ל|דואר אלקטרוני|דואר_אלקטרוני|אימייל|כתובת מייל|כתובת_מייל|כתובת דואר|כתובת_דואר)$/i,type:"email",label:"Email (Hebrew)",labelHe:"\u05D3\u05D5\u05D0\u05E8 \u05D0\u05DC\u05E7\u05D8\u05E8\u05D5\u05E0\u05D9"},{pattern:/^(?:טלפון|טל'|נייד|פלאפון|סלולרי|מספר טלפון|מספר_טלפון|טלפון נייד|טלפון_נייד|מס נייד|מס_נייד|מס' טל)$/i,type:"phone",label:"Phone (Hebrew)",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05D8\u05DC\u05E4\u05D5\u05DF"},{pattern:/^(?:כתובת|כתובת מגורים|כתובת_מגורים|רחוב|מס בית|מספר בית|עיר|ישוב|יישוב|מיקוד|כתובת מלאה|כתובת_מלאה|מען)$/i,type:"address",label:"Address (Hebrew)",labelHe:"\u05DB\u05EA\u05D5\u05D1\u05EA"},{pattern:/^(?:תאריך לידה|תאריך_לידה|ת לידה|תאריך הולדת|תאריך_הולדת|יום הולדת|יום_הולדת|גיל)$/i,type:"dob",label:"Date of birth (Hebrew)",labelHe:"\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4"},{pattern:/^(?:חשבון בנק|חשבון_בנק|מספר חשבון|מספר_חשבון|מס חשבון|מס' חשבון|בנק|סניף|מס סניף|iban|iban_il)$/i,type:"financial",label:"Bank account (Hebrew)",labelHe:"\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7"},{pattern:/^(?:כרטיס אשראי|כרטיס_אשראי|מספר אשראי|מס אשראי|מס' אשראי|cvv|אשראי|מס כרטיס|מס_כרטיס)$/i,type:"financial",label:"Credit card (Hebrew)",labelHe:"\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9"},{pattern:/^(?:שכר|משכורת|הכנסה|פרמיה|שכר ברוטו|שכר_ברוטו|שכר נטו|שכר_נטו|תגמול|בונוס|פיצוי)$/i,type:"financial",label:"Salary / income (Hebrew)",labelHe:"\u05E9\u05DB\u05E8/\u05D4\u05DB\u05E0\u05E1\u05D4"},{pattern:/^(?:אבחון|אבחנה|מחלה|תרופה|מרשם|בדיקה רפואית|בדיקה_רפואית|מצב רפואי|מצב_רפואי|חיסון|תוצאת בדיקה|תוצאת_בדיקה|רופא|רגישות|אלרגיה|סוג דם|סוג_דם)$/i,type:"medical",label:"Medical (Hebrew)",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9"},{pattern:/^(?:מספר פוליסה|מספר_פוליסה|מס פוליסה|מס' פוליסה|פוליסה|מספר חבר|מספר_חבר|מס חבר|מספר ביטוח|מספר_ביטוח|policy_?number|policy_?no|policy_?id)$/i,type:"policy",label:"Insurance policy number (Hebrew)",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05E4\u05D5\u05DC\u05D9\u05E1\u05D4"},{pattern:/^(?:מספר סוכן|מספר_סוכן|מס סוכן|מס' סוכן|מס_סוכן|קוד סוכן|קוד_סוכן|מספר משווק|מספר_משווק|מספר יצרן|סוכן ביטוח|agent_?number|agent_?no|agent_?id|agent_?code|broker_?id|broker_?number)$/i,type:"agent_id",label:"Insurance agent / broker number (Hebrew)",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05E1\u05D5\u05DB\u05DF"},{pattern:/^(?:שם הילד|שם_הילד|תעודת זהות של ילד|ילדים|קטין|מספר ילדים|מספר_ילדים|תעודת לידה|ת לידה ילד)$/i,type:"minor_data",label:"Minor data (Hebrew)",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05E2\u05DC \u05E7\u05D8\u05D9\u05DF"},{pattern:/^(?:דת|לאום|מין|נטייה מינית|נטייה_מינית|השקפה פוליטית|השקפה_פוליטית|מצב משפחתי|מצב_משפחתי|עדה|מוצא)$/i,type:"sensitive_personal",label:"Sensitive personal (Hebrew)",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05D0\u05D9\u05E9\u05D9 \u05E8\u05D2\u05D9\u05E9"},{pattern:/^(?:מספר רכב|מספר_רכב|מס רכב|מס' רכב|לוחית רישוי|לוחית_רישוי|מספר רישוי|מספר_רישוי)$/i,type:"tracking",label:"Vehicle ID (Hebrew)",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05E8\u05DB\u05D1"}];function Ne(e){let t=String(e??"").replace(/\D/g,"");if(t.length===0||t.length>9)return!1;let r=t.padStart(9,"0"),n=0;for(let s=0;s<9;s++){let i=parseInt(r[s]??"0",10)*(s%2+1);i>9&&(i-=9),n+=i}return n%10===0&&parseInt(r,10)>0}var xt=/(?<!\d)(?<!\d[.,])(?:\+972[\s-]?|0)(?:5[0-9]|7[0-9]|[2-4]|[89])(?:[\s-]?\d){7}(?!\d)(?![.,]\d)/g,wt=/(?<!:\/\/[^\s/@]*)[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/gi;var Cn=/\b[A-Z]{2}\d{2}(?: ?[A-Z0-9]{4}){2,7}(?: ?[A-Z0-9]{1,4})?\b/g;function As(e){let t=String(e??"").replace(/\s/g,"").toUpperCase();if(!/^[A-Z]{2}\d{2}[A-Z0-9]{10,30}$/.test(t))return!1;let r=t.slice(4)+t.slice(0,4),n=0;for(let s of r){let i=s>="A"&&s<="Z"?String(s.charCodeAt(0)-55):s;for(let o of i)n=(n*10+Number(o))%97}return n===1}function $s(e){let t=String(e??"").replace(/\D/g,"");if(t.length<13||t.length>19||!/^[2-6]/.test(t))return!1;let r=0,n=!1;for(let s=t.length-1;s>=0;s--){let i=t.charCodeAt(s)-48;if(i<0||i>9)return!1;n&&(i*=2,i>9&&(i-=9)),r+=i,n=!n}return r%10===0}function Rs(e){if(!e)return null;let t=e.trim();for(let r of tl)if(r.pattern.test(t))return{type:r.type,label:r.label,labelHe:r.labelHe};return null}var nl=[{type:"biometric",tokens:["biometric","fingerprint","\u05D1\u05D9\u05D5\u05DE\u05D8\u05E8\u05D9"],phrases:["face id","\u05D8\u05D1\u05D9\u05E2\u05EA \u05D0\u05E6\u05D1\u05E2"]},{type:"medical",tokens:["diagnosis","medical","disease","medication","prescription","allergy","vaccine","\u05D0\u05D1\u05D7\u05D5\u05DF","\u05D0\u05D1\u05D7\u05E0\u05D4","\u05DE\u05D7\u05DC\u05D4","\u05EA\u05E8\u05D5\u05E4\u05D4","\u05DE\u05E8\u05E9\u05DD","\u05D7\u05D9\u05E1\u05D5\u05DF","\u05D0\u05DC\u05E8\u05D2\u05D9\u05D4"],phrases:["medical record","blood type","\u05DE\u05E6\u05D1 \u05E8\u05E4\u05D5\u05D0\u05D9","\u05E1\u05D5\u05D2 \u05D3\u05DD"]},{type:"sensitive_personal",tokens:["religion","ethnicity","nationality","\u05D3\u05EA","\u05DC\u05D0\u05D5\u05DD","\u05E2\u05D3\u05D4","\u05DE\u05D5\u05E6\u05D0"],phrases:["sexual orientation","marital status","\u05DE\u05E6\u05D1 \u05DE\u05E9\u05E4\u05D7\u05EA\u05D9","\u05E0\u05D8\u05D9\u05D9\u05D4 \u05DE\u05D9\u05E0\u05D9\u05EA"]},{type:"minor_data",tokens:["minor","\u05E7\u05D8\u05D9\u05DF"],phrases:["child name","\u05E9\u05DD \u05D4\u05D9\u05DC\u05D3","\u05E9\u05DD \u05D4\u05E7\u05D8\u05D9\u05DF"]},{type:"id",tokens:["ssn","passport","\u05D6\u05D4\u05D5\u05EA","\u05D3\u05E8\u05DB\u05D5\u05DF"],phrases:["national id","id number","identity number","social security","driver license","driving license","drivers license","passport number","tax id","\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA","\u05DE\u05E1\u05E4\u05E8 \u05D6\u05D4\u05D5\u05EA","\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF \u05E0\u05D4\u05D9\u05D2\u05D4"]},{type:"financial",tokens:["iban","swift","bic","salary","income","wage","\u05D0\u05E9\u05E8\u05D0\u05D9","\u05E9\u05DB\u05E8","\u05DE\u05E9\u05DB\u05D5\u05E8\u05EA","\u05D4\u05DB\u05E0\u05E1\u05D4"],phrases:["bank account","account number","credit card","card number","routing number","sort code","\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7","\u05DE\u05E1\u05E4\u05E8 \u05D7\u05E9\u05D1\u05D5\u05DF","\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9"]},{type:"policy",tokens:["policy","\u05E4\u05D5\u05DC\u05D9\u05E1\u05D4"],phrases:["policy number","member number","\u05DE\u05E1\u05E4\u05E8 \u05E4\u05D5\u05DC\u05D9\u05E1\u05D4"]},{type:"agent_id",tokens:["\u05DE\u05E9\u05D5\u05D5\u05E7"],phrases:["agent number","agent code","broker id","\u05DE\u05E1\u05E4\u05E8 \u05E1\u05D5\u05DB\u05DF"]},{type:"dob",tokens:["dob","birthdate","birthday","\u05DC\u05D9\u05D3\u05D4","\u05D4\u05D5\u05DC\u05D3\u05EA","\u05D2\u05D9\u05DC"],phrases:["date of birth","birth date","\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4"]},{type:"phone",tokens:["phone","tel","mobile","cell","fax","\u05D8\u05DC\u05E4\u05D5\u05DF","\u05E0\u05D9\u05D9\u05D3","\u05E4\u05DC\u05D0\u05E4\u05D5\u05DF","\u05E1\u05DC\u05D5\u05DC\u05E8\u05D9"],phrases:["phone number","mobile number","cell phone","\u05D8\u05DC\u05E4\u05D5\u05DF \u05E0\u05D9\u05D9\u05D3"]},{type:"email",tokens:["email","mail","\u05D0\u05D9\u05DE\u05D9\u05D9\u05DC","\u05DE\u05D9\u05D9\u05DC","\u05D3\u05D5\u05D0\u05DC"],phrases:["email address","e mail","\u05D3\u05D5\u05D0\u05E8 \u05D0\u05DC\u05E7\u05D8\u05E8\u05D5\u05E0\u05D9","\u05DB\u05EA\u05D5\u05D1\u05EA \u05DE\u05D9\u05D9\u05DC"]},{type:"address",tokens:["address","street","city","zipcode","zip","postcode","\u05DB\u05EA\u05D5\u05D1\u05EA","\u05E8\u05D7\u05D5\u05D1","\u05E2\u05D9\u05E8","\u05D9\u05E9\u05D5\u05D1","\u05D9\u05D9\u05E9\u05D5\u05D1","\u05DE\u05D9\u05E7\u05D5\u05D3","\u05DE\u05E2\u05DF"],phrases:["home address","postal code","street address","zip code","\u05DB\u05EA\u05D5\u05D1\u05EA \u05DE\u05D2\u05D5\u05E8\u05D9\u05DD"]},{type:"location",tokens:["gps","latitude","longitude","geolocation","\u05DE\u05D9\u05E7\u05D5\u05DD"],phrases:["gps coordinates"]},{type:"tracking",tokens:["plate","vehicle","\u05E8\u05DB\u05D1","\u05E8\u05D9\u05E9\u05D5\u05D9"],phrases:["license plate","vehicle number","plate number","\u05DE\u05E1\u05E4\u05E8 \u05E8\u05DB\u05D1"]},...Es(),{type:"name",tokens:["name","\u05E9\u05DD"],phrases:["first name","last name","full name","family name","given name","surname","\u05E9\u05DD \u05E4\u05E8\u05D8\u05D9","\u05E9\u05DD \u05DE\u05E9\u05E4\u05D7\u05D4","\u05E9\u05DD \u05DE\u05DC\u05D0"]}];function kt(e){if(!e||/^\[[A-Z_]+(?:-\d+)?\]$/.test(e.trim()))return null;let t=e.trim().toLowerCase().replace(/["'`׳״]/g,"").replace(/[_\-.]+/g," ").replace(/\s+/g," ").trim();if(!t)return null;let r=new Set(t.match(/[\p{L}\p{N}]+/gu)??[]);for(let n of nl)if(n.phrases?.some(i=>t.includes(i))||n.tokens?.some(i=>r.has(i)))return{type:n.type,label:n.type,labelHe:vt(n.type)};return null}function vt(e){return{id:"\u05EA\u05E2\u05D5\u05D3\u05EA \u05D6\u05D4\u05D5\u05EA",agent_id:"\u05DE\u05E1\u05E4\u05E8 \u05E1\u05D5\u05DB\u05DF",employment:"\u05E4\u05E8\u05D8\u05D9 \u05EA\u05E2\u05E1\u05D5\u05E7\u05D4",education:"\u05D4\u05E9\u05DB\u05DC\u05D4",behavior:"\u05E4\u05E8\u05D5\u05E4\u05D9\u05DC \u05D4\u05EA\u05E0\u05D4\u05D2\u05D5\u05EA",policy:"\u05DE\u05E1\u05E4\u05E8 \u05E4\u05D5\u05DC\u05D9\u05E1\u05D4",name:"\u05E9\u05DD \u05D0\u05D3\u05DD",email:"\u05D3\u05D5\u05D0\u05E8 \u05D0\u05DC\u05E7\u05D8\u05E8\u05D5\u05E0\u05D9",phone:"\u05DE\u05E1\u05E4\u05E8 \u05D8\u05DC\u05E4\u05D5\u05DF",address:"\u05DB\u05EA\u05D5\u05D1\u05EA",dob:"\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4",financial:"\u05E4\u05E8\u05D8\u05D9\u05DD \u05E4\u05D9\u05E0\u05E0\u05E1\u05D9\u05D9\u05DD",medical:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9",minor_data:"\u05DE\u05D9\u05D3\u05E2 \u05E2\u05DC \u05E7\u05D8\u05D9\u05DF",sensitive_personal:"\u05DE\u05D9\u05D3\u05E2 \u05D0\u05D9\u05E9\u05D9 \u05E8\u05D2\u05D9\u05E9",biometric:"\u05DE\u05D9\u05D3\u05E2 \u05D1\u05D9\u05D5\u05DE\u05D8\u05E8\u05D9",auth:"\u05E1\u05D9\u05E1\u05DE\u05D0\u05D5\u05EA/\u05E1\u05D5\u05D3\u05D5\u05EA",tracking:"\u05DE\u05D6\u05D4\u05D9 \u05DE\u05E2\u05E7\u05D1",location:"\u05DE\u05D9\u05E7\u05D5\u05DD"}[e]??"\u05DE\u05D9\u05D3\u05E2 \u05D0\u05D9\u05E9\u05D9"}var rl=/^(?:\d{5,9}|\d{8}-\d)$/;function Ts(e){let t=0,r=0,n=0,s=0,i=0;for(let a of e)typeof a=="string"&&(rl.test(a.trim())&&Ne(a)&&t++,xt.lastIndex=0,xt.test(a)&&r++,wt.lastIndex=0,wt.test(a)&&n++,Cn.lastIndex=0,[...a.matchAll(Cn)].some(c=>As(c[0]))&&s++,$s(a)&&i++);let o=e.length||1;return t/o>=.3?{type:"id",label:"Israeli ID (sniffed)",matchedSample:t}:s/o>=.3?{type:"financial",label:"IBAN-IL (sniffed)",matchedSample:s}:r/o>=.3?{type:"phone",label:"IL phone (sniffed)",matchedSample:r}:n/o>=.3?{type:"email",label:"Email (sniffed)",matchedSample:n}:i/o>=.3?{type:"financial",label:"Credit card (sniffed)",matchedSample:i}:null}var sl=[{type:"full_name",kind:"name",severity:"medium",hint:`A person's name in free text (after a role word such as \u05DC\u05E7\u05D5\u05D7 / \u05DE\u05E8 / \u05E2\u05D5"\u05D3, or Client: / Mr.).`},{type:"bank_account",kind:"bank_account",severity:"high",hint:"An Israeli bank account number (branch-account-check form) in plaintext."},{type:"medical",kind:"medical",severity:"high",hint:"Medical information (diagnosis, medication, lab value) in plaintext."},{type:"birth_date",kind:"dob",severity:"medium",hint:"A date of birth in plaintext."},{type:"address",kind:"address",severity:"medium",hint:"A street address in plaintext."},{type:"license_plate",kind:"plate",severity:"low",hint:"A vehicle licence plate in plaintext."}],il=/^(?:לקוח|מטופל|מועמד|שם|נהג|מבוטח|תובע|נתבע|שוכר|מחזיק|עו"ד|ד"ר|פרופ'|מר|גברת|חשבון|ח-ן|[בהוכלמש]{0,2}אבחנ[הות]|תאריך לידה|נולד|נולדה|ד\.ל\.|[בהוכלמש]{0,2}גיל|[Dd]iagnosis|[Dd]iagnosed\s+with)\s*:?\s*/;function ol(e,t,r,n){if(n==="address")return{start:t,end:r};let s=il.exec(e.slice(t,r));return s&&t+s[0].length<r?{start:t+s[0].length,end:r}:{start:t,end:r}}function W(e,t,r=()=>!0){let n=[],s=new RegExp(e.source,e.flags.includes("g")?e.flags:e.flags+"g");for(let i of t.matchAll(s)){let o=i[1];if(!o||!r(o))continue;let a=(i.index??0)+i[0].indexOf(o);n.push({start:a,end:a+o.length})}return n}var Is=String.raw`[A-Z][a-z']+(?:-[A-Z]?[a-z']+)*`,Pn=String.raw`${Is}(?:[ \t]+${Is}){0,2}`,al=new RegExp(String.raw`\b(?:Mr|Mrs|Ms|Miss|Dr|Prof)\.?[ \t]+(${Pn})`),cl=new RegExp(String.raw`\b(?:Client|Customer|Patient|Name|Full name|Beneficiary|Insured|Applicant|Tenant|Employee|Holder|Investor)[ \t]*:[ \t]*(${Pn})`),ll=new RegExp(String.raw`\b(${Pn})(?=,[ \t]*\d{1,3}[ \t]*,|[ \t]*\(\d{1,3}\))`,"g"),dl=/^(?:Figure|Fig|Table|Step|Section|Chapter|Page|Shot|Scene|Part|Item|Note|Appendix|Version|Level|Phase|Round|Room|Floor|Line|Act|Episode|Season|Slide|Clip|Take)$/,ul=/\b(\d{1,5}[ \t]+(?:[A-Z][A-Za-z'-]*[ \t]+){1,3}(?:Street|St|Road|Rd|Avenue|Ave|Boulevard|Blvd|Lane|Ln|Drive|Way|Court|Ct|Place|Pl)\b\.?)/,fl=/\b(?:policy|claim|account|member|customer|client|contract|case|reference|ref|company|registration)[ \t]+(?:number|no\.?|num\.?|#)[ \t]*:?[ \t]*([A-Z]{0,4}-?\d[\d-]{3,}\d[A-Z]?)\b/i,pl=String.raw`\d{1,2}[\/\-.]\d{1,2}[\/\-.]\d{2,4}|\d{4}[\/\-.]\d{1,2}[\/\-.]\d{1,2}|\d{1,2}\s+[A-Z][a-z]{2,8}\s+\d{4}|[A-Z][a-z]{2,8}\s+\d{1,2},?\s+\d{4}`,hl=new RegExp(String.raw`\b(?:date\s+of\s+birth|birth\s*date|d\.?o\.?b\.?|born(?:\s+on)?)\s*[:\-]?\s*(${pl})`,"i"),ml=/\b((?!000|666|9\d\d)\d{3}-(?!00)\d{2}-(?!0000)\d{4})\b/,gl=/\b((?!BG|GB|NK|KN|TN|NT|ZZ)[A-CEGHJ-PR-TW-Z][A-CEGHJ-NPR-TW-Z]\s?\d{2}\s?\d{2}\s?\d{2}\s?[A-D])\b/,yl=/(?<![\w+])(\+(?!972)[1-9][\d\s().-]{7,20}\d)/,Cs=e=>e.replace(/\D/g,"").length,bl=String.raw`(?:(?<![א-ת])ת["'׳״]?\.?ז\.?|תעודת[\s_]?זהות|מספר[\s_]?זהות|מס['׳]?[\s_]?זהות|\bID[ \t]*(?:No\.?|Number|#)|\bnational[ \t]+ID|\bidentity[ \t]+(?:No\.?|number)|\bteudat[\s_]?zehut)`,_l=new RegExp(String.raw`${bl}[ \t]*[:#.\-]?[ \t]*(\d[\d \t-]{6,10}\d)(?![\d-])`,"i"),xl=e=>{let t=e.replace(/\D/g,"");return t.length!==8&&t.length!==9||/^\d{9}$/.test(e)||/^\d{8}-\d$/.test(e)?!1:Ne(t)},wl=/(?:(?<![א-ת])דרכון|\bpassport(?:[ \t]*(?:No\.?|Number|#))?)[ \t]*[:#.\-]?[ \t]*([A-Z]{0,2}\d{6,9})(?![\dA-Z])/i,kl=[{kind:"name",severity:"medium",hint:"A person's name in free text (after Mr. / Dr. / Client: \u2026, or with an age beside it).",find:e=>[...W(al,e),...W(cl,e),...W(ll,e,t=>!t.split(/[ \t]/).some(r=>dl.test(r)))]},{kind:"address",severity:"medium",hint:"A street address in plaintext.",find:e=>W(ul,e)},{kind:"reference",severity:"medium",hint:"A policy, claim, account or company number in plaintext.",find:e=>W(fl,e)},{kind:"dob",severity:"medium",hint:"A date of birth in plaintext.",find:e=>W(hl,e)},{kind:"national_id",severity:"high",hint:"A national ID number (an Israeli ID after its word, US SSN, UK NINO) in plaintext.",find:e=>[...W(ml,e),...W(gl,e),...W(_l,e,xl)]},{kind:"passport",severity:"high",hint:"A passport number, after the word that announces it, in plaintext.",find:e=>W(wl,e)},{kind:"phone",severity:"high",hint:"A phone number in international form in plaintext.",find:e=>W(yl,e,t=>Cs(t)>=8&&Cs(t)<=15)}];function vl(e){let t=new Map;for(let r of e){let n=t.get(r.kind);t.set(r.kind,n?{...n,find:s=>[...n.find(s),...r.find(s)]}:r)}return[...t.values()]}function Ps(){let e=sl.map(({type:t,kind:r,severity:n,hint:s})=>{let i=new xe([t]);return{kind:r,severity:n,hint:s,find:o=>i.detect(o).map(a=>ol(o,a.startIndex,a.endIndex,r))}});return vl([...e,...kl])}var we={_comment:"CANONICAL secret ruleset \u2014 the SINGLE SOURCE OF TRUTH for hardcoded-secret detection, loaded by BOTH the web scanner (lib/soc/exposure-map.ts) and the installed Capsule agent (apps/desktop/src-tauri/src/scanner.rs, via include_str!). Patterns are written in the regex subset both JavaScript and the Rust `regex` crate accept (no lookaround, no backreferences). A connection string counts only WITH credentials (user:pass@). Edit here once and both engines stay aligned.",rules:[{id:"aws-access-key",subkind:"aws_access_key",name:"AWS Access Key",severity:"critical",pattern:"(?:^|[^A-Z0-9])AKIA(?!X{16})[A-Z2-7]{16}(?:[^A-Z2-7]|$)",hint:"AWS access key id detected. Rotate via IAM and move to an environment variable."},{id:"aws-secret-key",subkind:"aws_secret_key",name:"AWS Secret Key",severity:"critical",pattern:`(?:aws_secret_access_key|aws_secret_key|secret_access_key)\\s*[=:]\\s*['"]?[A-Za-z0-9/+=]{40}['"]?`,hint:"AWS secret access key detected. Rotate immediately."},{id:"gcp-api-key",subkind:"gcp_api_key",name:"GCP API Key",severity:"critical",pattern:"AIza[0-9A-Za-z_-]{35}",hint:"Google API key detected. Restrict or rotate it in the Google Cloud console."},{id:"gcp-service-account",subkind:"gcp_service_account",name:"GCP Service Account",severity:"critical",pattern:'"type"\\s*:\\s*"service_account"',hint:"GCP service-account JSON detected. Move it out of the repo and rotate the key."},{id:"github-token",subkind:"github_token",name:"GitHub Token",severity:"critical",pattern:"gh[pousr]_[0-9a-zA-Z]{36,}",hint:"GitHub token detected. Revoke at https://github.com/settings/tokens."},{id:"github-fine-grained",subkind:"github_fine_grained_token",name:"GitHub Fine-Grained Token",severity:"critical",pattern:"github_pat_[0-9a-zA-Z_]{22,}",hint:"GitHub fine-grained token detected. Revoke it in GitHub settings."},{id:"gitlab-token",subkind:"gitlab_token",name:"GitLab Token",severity:"critical",pattern:"glpat-[0-9a-zA-Z_-]{20,}",hint:"GitLab token detected. Revoke it in GitLab access tokens."},{id:"stripe-secret",subkind:"stripe_key",name:"Stripe Secret Key",severity:"critical",pattern:"sk_live_[0-9a-zA-Z]{24,}",hint:"Stripe live secret key detected. Roll it in the Stripe dashboard."},{id:"stripe-restricted",subkind:"stripe_restricted_key",name:"Stripe Restricted Key",severity:"critical",pattern:"rk_live_[0-9a-zA-Z]{24,}",hint:"Stripe restricted key detected. Roll it in the Stripe dashboard."},{id:"slack-token",subkind:"slack_token",name:"Slack Token",severity:"high",pattern:"xox[baprs]-[0-9a-zA-Z-]{10,}",hint:"Slack token detected. Revoke it in the Slack app settings."},{id:"slack-webhook",subkind:"slack_webhook",name:"Slack Webhook",severity:"high",pattern:"hooks\\.slack\\.com/services/T[0-9A-Z]{8,}/B[0-9A-Z]{8,}/[0-9a-zA-Z]{24}",hint:"Slack incoming-webhook URL detected. Regenerate it."},{id:"twilio-api-key",subkind:"twilio_api_key",name:"Twilio API Key",severity:"high",pattern:"SK[0-9a-fA-F]{32}",hint:"Twilio API key detected. Rotate it in the Twilio console."},{id:"sendgrid-api-key",subkind:"sendgrid_api_key",name:"SendGrid API Key",severity:"critical",pattern:"SG\\.[0-9a-zA-Z_-]{22}\\.[0-9a-zA-Z_-]{43}",hint:"SendGrid API key detected. Rotate it in the SendGrid console."},{id:"postgres-uri",subkind:"postgres_uri",name:"PostgreSQL Connection String",severity:"critical",pattern:`postgres(?:ql)?://[^\\s'":/@]*:[^\\s'"@]+@[^\\s'"]+`,hint:"PostgreSQL connection string WITH credentials detected. Move it to a secret manager and rotate the password."},{id:"mongodb-uri",subkind:"mongodb_uri",name:"MongoDB Connection String",severity:"critical",pattern:`mongodb(?:\\+srv)?://[^\\s'":/@]*:[^\\s'"@]+@[^\\s'"]+`,hint:"MongoDB connection string WITH credentials detected. Move it to a secret manager and rotate the password."},{id:"redis-uri",subkind:"redis_uri",name:"Redis Connection String",severity:"high",pattern:`redis(?:s)?://[^\\s'":/@]*:[^\\s'"@]+@[^\\s'"]+`,hint:"Redis connection string WITH credentials detected. Move it to a secret manager and rotate the password."},{id:"openai-key",subkind:"openai_key",name:"OpenAI API Key",severity:"critical",pattern:"sk-[0-9a-zA-Z]{20,}T3BlbkFJ[0-9a-zA-Z]{20,}",hint:"OpenAI API key detected. Rotate at https://platform.openai.com/api-keys."},{id:"anthropic-key",subkind:"anthropic_key",name:"Anthropic API Key",severity:"critical",pattern:"sk-ant-[0-9a-zA-Z_-]{40,}",hint:"Anthropic API key detected. Rotate at https://console.anthropic.com/."},{id:"firebase-key",subkind:"firebase_key",name:"Firebase API Key",severity:"high",pattern:"AIza[0-9A-Za-z_-]{35}",hint:"Firebase API key detected. Restrict it in the Firebase console."},{id:"supabase-key",subkind:"supabase_key",name:"Supabase Service Key",severity:"critical",pattern:"eyJ[0-9a-zA-Z_-]{100,}",hint:"Long JWT (possible Supabase service key) detected. Rotate it and keep it server-side only."},{id:"private-key",subkind:"private_key",name:"Private Key",severity:"critical",pattern:"-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----",hint:"Private key material in plaintext. Rotate immediately and move to a key manager (KMS/Vault).",skipPlaceholder:!0},{id:"jwt-secret",subkind:"jwt_secret",name:"JWT/Generic Secret",severity:"high",pattern:`(?:jwt_secret|JWT_SECRET|secret_key|SECRET_KEY|api_secret|API_SECRET)\\s*[=:]\\s*['"][^'"]{8,}['"]`,hint:"Hardcoded signing/API secret detected. Move it to an environment variable and rotate it."},{id:"password-in-code",subkind:"password_in_code",name:"Password in Code",severity:"high",pattern:`(?:password|passwd|pwd)\\s*[=:]\\s*['"][^'"]{8,}['"]`,hint:"Hardcoded password detected. Move it to a secret manager and rotate it."},{id:"bearer-token",subkind:"bearer_token",name:"Bearer Token in Code",severity:"high",pattern:`['"]Bearer\\s+[0-9a-zA-Z._-]{20,}['"]`,hint:"Hardcoded bearer token detected. Move it to a secret manager and rotate it."},{id:"hex-secret-32",subkind:"hex_secret",name:"Hardcoded 32+ Hex Secret",severity:"medium",pattern:`['"][0-9a-f]{32,}['"]`,hint:"Long hex string that looks like a secret/hash. Confirm it is not a live credential."},{id:"base64-secret",subkind:"base64_secret",name:"Hardcoded Base64 Secret (long)",severity:"medium",pattern:`['"][A-Za-z0-9+/]{64,}={0,2}['"]`,hint:"Long base64 blob that looks like an embedded secret. Confirm it is not a live credential."}]};var Al=[{pattern:/^(full_?name|first_?name|last_?name|spouse_?name|beneficiary_?name)$/i,type:"name",label:"Person name",labelHe:"\u05E9\u05DD \u05D0\u05D3\u05DD"},{pattern:/^(email|e_?mail|email_?address)$/i,type:"email",label:"Email address",labelHe:"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC"},{pattern:/^(phone|mobile|telephone|phone_?number|cell_?phone)$/i,type:"phone",label:"Phone number",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05D8\u05DC\u05E4\u05D5\u05DF"},{pattern:/^(id_?number|identity|ssn|social_?security|national_?id|teudat_?zehut)$/i,type:"id",label:"ID number",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05DE\u05D6\u05D4\u05D4"},{pattern:/^(address|street_?address|home_?address)$/i,type:"address",label:"Address",labelHe:"\u05DB\u05EA\u05D5\u05D1\u05EA"},{pattern:/^(date_?of_?birth|dob|birth_?date|birthday)$/i,type:"dob",label:"Date of birth",labelHe:"\u05EA\u05D0\u05E8\u05D9\u05DA \u05DC\u05D9\u05D3\u05D4"},{pattern:/^(bank_?account|iban|account_?number|bank_?details|routing_?number)$/i,type:"financial",label:"Bank account",labelHe:"\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05E0\u05E7"},{pattern:/^(credit_?card|card_?number|cvv|cc_?number)$/i,type:"financial",label:"Credit card",labelHe:"\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D0\u05E9\u05E8\u05D0\u05D9"},{pattern:/^(salary|income|commission|premium|compensation)$/i,type:"financial",label:"Financial data",labelHe:"\u05E0\u05EA\u05D5\u05DF \u05E4\u05D9\u05E0\u05E0\u05E1\u05D9"},{pattern:/^(medical_?info|health_?conditions|diagnosis|medication)$/i,type:"medical",label:"Medical data",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9"},{pattern:/^(ip_?address)$/i,type:"tracking",label:"IP address",labelHe:"\u05DB\u05EA\u05D5\u05D1\u05EA IP"},{pattern:/^(passport|passport_?number|passport_?id)$/i,type:"id",label:"Passport number",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05D3\u05E8\u05DB\u05D5\u05DF"},{pattern:/^(driver_?license|drivers_?license|dl_?number)$/i,type:"id",label:"Driver license",labelHe:"\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF \u05E0\u05D4\u05D9\u05D2\u05D4"},{pattern:/^(iban|swift_?code|bic)$/i,type:"financial",label:"Banking code",labelHe:"\u05E7\u05D5\u05D3 \u05D1\u05E0\u05E7\u05D0\u05D9"},{pattern:/^(tax_?id|tin|vat_?number|ein)$/i,type:"financial",label:"Tax ID",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05DE\u05E1"},{pattern:/^(insurance_?number|policy_?number|member_?id)$/i,type:"id",label:"Insurance/Member ID",labelHe:"\u05DE\u05E1\u05E4\u05E8 \u05D1\u05D9\u05D8\u05D5\u05D7/\u05D7\u05D1\u05E8"},{pattern:/^(blood_?type|allergy|allergies|prescription)$/i,type:"medical",label:"Medical data",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05E8\u05E4\u05D5\u05D0\u05D9"},{pattern:/^(biometric|fingerprint|face_?id|retina)$/i,type:"biometric",label:"Biometric data",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05D1\u05D9\u05D5\u05DE\u05D8\u05E8\u05D9"},{pattern:/^(latitude|longitude|lat|lng|geo_?location|coordinates)$/i,type:"location",label:"Geolocation",labelHe:"\u05DE\u05D9\u05E7\u05D5\u05DD \u05D2\u05D9\u05D0\u05D5\u05D2\u05E8\u05E4\u05D9"},{pattern:/^(mac_?address|device_?fingerprint|imei|serial_?number)$/i,type:"tracking",label:"Device identifier",labelHe:"\u05DE\u05D6\u05D4\u05D4 \u05DE\u05DB\u05E9\u05D9\u05E8"},{pattern:/^(ethnicity|race|religion|political_?affiliation|sexual_?orientation)$/i,type:"sensitive_personal",label:"Sensitive personal",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05D0\u05D9\u05E9\u05D9 \u05E8\u05D2\u05D9\u05E9"},{pattern:/^(minor|child_?name|child_?age|dependent)$/i,type:"minor_data",label:"Minor data",labelHe:"\u05DE\u05D9\u05D3\u05E2 \u05E2\u05DC \u05E7\u05D8\u05D9\u05E0\u05D9\u05DD"},{pattern:/^(signature|digital_?signature)$/i,type:"id",label:"Signature",labelHe:"\u05D7\u05EA\u05D9\u05DE\u05D4"},{pattern:/^(vehicle_?number|license_?plate|plate_?number)$/i,type:"tracking",label:"Vehicle ID",labelHe:"\u05DE\u05D6\u05D4\u05D4 \u05E8\u05DB\u05D1"}],$l=/^(id|uuid|created_?at|updated_?at|deleted_?at|status|type|category|description|title|slug|url|path|key|value|sort_?order|position|enabled|active|public|version|metadata|config|settings|options|data|content|body|raw|json|text|note|comment|label|color|icon|image|avatar|logo|thumbnail|preview|template|schema|format|mode|level|priority|severity|source|target|parent|child|owner|creator|modifier|assignee|project|workspace|organization|team|group|channel|thread|room|session|device|platform|browser|locale|timezone|currency|country|region|city|zip|postal|state|province|name|display_?name|user_?agent|password_?hash|secret|token|private_?key|auth_?token|constraint|index|sequence|trigger|function|procedure|database|namespace|migration|revision)$/i,Rl=/^(beacon_?registr|device_?config|hardware|sensor|firmware|telemetry|metric|analytic|log_?event|audit_?log|system_?config|cache|queue|job|migration|schema_?version|spatial_?ref)/i,Tl=/^(minor|major|uuid|rssi|tx_?power|beacon_?id|device_?type|firmware_?version|batch_?id|zone_?id)$/i;function Ls(e,t){if($l.test(e)||/^name$/i.test(e)||t&&Rl.test(t)||Tl.test(e))return null;for(let n of Al)if(n.pattern.test(e))return n.type;let r=Rs(e);return r?r.type:null}var ah=we.rules.map(e=>({id:e.id,name:e.name,pattern:new RegExp(e.pattern),severity:e.severity}));var ch=512*1024,lh=50*1024*1024;var Il=new Set(["hex-secret-32","base64-secret"]),bh=we.rules.filter(e=>!Il.has(e.id)).map(e=>new RegExp(e.pattern,"g"));var Os={id:"critical",agent_id:"high",policy:"high",financial:"critical",medical:"critical",sensitive_personal:"critical",minor_data:"critical",biometric:"critical",auth:"critical",name:"high",email:"high",phone:"high",address:"high",dob:"high",location:"high",tracking:"medium",employment:"high",education:"medium",behavior:"high"};function Ds(e){return Os[e]}function Cl(e){return Os[e]??"low"}function Fs(e,t){let r=[];for(let n of t){let s=n.rows.length;for(let i=0;i<n.headers.length;i++){let o=n.headers[i]??"",a=o?Ls(o.trim().replace(/["'`׳״:]/g,"").replace(/\s+/g,"_"),n.name)??kt(o)?.type??null:null,c=[];for(let f of n.rows){let d=f[i];typeof d=="string"&&d.length>0&&c.push(d)}let l=c.length>0?Ts(c):null;l?r.push(Ns(e,n.name,o,l.type,l.label,"value",l.matchedSample,s)):a&&r.push(Ns(e,n.name,o,a,vt(a),"header",0,s))}}return r}function Ns(e,t,r,n,s,i,o,a){return{file:e,location:t,column:r,type:n,label:s,category:vt(n),severity:Cl(n),matchKind:i,hits:o,sampleSize:a}}var Pl=new Set(["hex-secret-32","base64-secret"]),Ll=[/(?:[$€£]|USD|EUR|GBP)\s?\d[\d,]*(?:\.\d+)?/g,/\d[\d,]*(?:\.\d+)?\s?(?:[$€£]|USD|EUR|GBP|דולר|יורו)/g,/\b\d{1,3}(?:,\d{3})+(?:\.\d+)?\b/g];function Nl(e){let t=new xe(["financial_amount"]);return{kind:"amount",severity:"medium",hint:"A money amount (the amounts dial is on: amounts are treated as sensitive here).",find:r=>{if(!e())return[];let n=t.detect(r).map(i=>({start:i.startIndex,end:i.endIndex}));for(let i of Ll){i.lastIndex=0;for(let o of r.matchAll(i))n.push({start:o.index,end:o.index+o[0].length})}n.sort((i,o)=>i.start-o.start||o.end-i.end);let s=[];for(let i of n){let o=s[s.length-1];o&&i.start<o.end?o.end=Math.max(o.end,i.end):s.push({...i})}return s}}}function Ms(e={}){let t=e.amounts??(()=>!1),r=[...Ps(),Nl(t)],n=we.rules.filter(s=>!Pl.has(s.id)).map(s=>({id:s.id,name:s.name,severity:s.severity,pattern:new RegExp(s.pattern)}));return{text:r,amounts:t,header:s=>{let i=kt(s);return i?{type:i.type,label:i.labelHe||i.label}:null},secrets:n,table:s=>Fs("",[s]).filter(i=>i.column).map(i=>({column:i.column,type:i.type,category:i.category,severity:i.severity,hits:i.hits,how:i.matchKind==="value"?"value":"header"})),severity:s=>Ds(s)}}var js=!1;function Hs(){js||(js=!0,St(Ms({amounts:Pr})))}Hs();Ss(process.argv.slice(2)).catch(()=>{process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"ask",permissionDecisionReason:"NoData could not check this file before it is read. Allow anyway?"}}))});