cc-safety-net 2.4.8 → 2.4.10

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/README.md CHANGED
@@ -89,6 +89,8 @@ Keep the `@latest` qualifier. A bare `cc-safety-net` spec can run an older copy
89
89
 
90
90
  OpenCode integration supports v1.18.29+ and v2.0.6+. Run `npx -y cc-safety-net@latest install --opencode`; the installer selects the host's plugin commands. See [OpenCode compatibility](docs/opencode-compatibility.md) for v2 shell configuration and host limitations.
91
91
 
92
+ OpenClaw integration requires OpenClaw 2026.8.1+. The installer accepts the plugin's declared capabilities for you, and older OpenClaw releases reject that option.
93
+
92
94
  ## Safety presets
93
95
 
94
96
  To set a preset, run `npx cc-safety-net gui` and open Policy.
@@ -1,5 +1,5 @@
1
1
  // cc-safety-net managed Amp plugin. Do not edit. Reinstall with: npx -y cc-safety-net install --amp
2
- // version: 2.4.8
2
+ // version: 2.4.10
3
3
  // @bun
4
4
  var Ci="CC Safety Net could not analyze the command because it exceeds safe analysis limits. Simplify or split the command and retry.",He="Command exceeds maximum recursion depth and cannot be safely analyzed. Flatten the nesting and retry.",wn="CC Safety Net failed closed because command analysis failed unexpectedly. This is not caused by your command. Report it to the user.";var bi={errorCode:"path-canonicalization-limit",reason:"CC Safety Net could not analyze the command because it exceeds safe analysis limits. Simplify or split the command and retry."},_n={errorCode:"structural-shell-syntax-limit",reason:"Command analysis exceeds CC Safety Net's derived-command work limit. Reduce nested or embedded command complexity and retry."},V=Object.freeze({realpathAttempts:{cap:16384,...bi},processedCandidateBytes:{cap:4194304,...bi},pathEnvironmentExpansion:{cap:64,...bi},recursionDepth:{cap:10,errorCode:"structural-shell-syntax-limit",reason:"Command exceeds maximum recursion depth and cannot be safely analyzed. Flatten the nesting and retry."},derivedTokens:{cap:16384,..._n},trackedHeredocFiles:{cap:64,..._n},controlFlowStates:{cap:64,..._n},wrapperPeelIterations:{cap:20,..._n},derivedCommandShape:_n});class D extends Error{kind;name="AnalysisLimit";constructor(e){super(V[e].reason);this.kind=e}}function be(){let e=new Map;return{counters:e,resolvedPaths:new Map,charge(t,n=1){let r=(e.get(t)??0)+n;if(e.set(t,r),r>V[t].cap)throw new D(t)}}}var Pp=[/\bgh[pousr]_[A-Za-z0-9]{20,}\b/g,/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,/\bglpat-[A-Za-z0-9_-]{20,}\b/g,/\bxox[abeprs]-[A-Za-z0-9-]{20,}\b/g,/\bnpm_[A-Za-z0-9_]{20,}\b/g,/\bpypi-[A-Za-z0-9_-]{20,}\b/g,/\b[rs]k_(?:live|test)_[A-Za-z0-9_]{20,}\b/g,/\bsk-[A-Za-z0-9_-]{20,}\b/g,/\bsk_[A-Za-z0-9]{20,}\b/g,/\bgsk_[A-Za-z0-9]{52,}\b/g,/\bxai-[A-Za-z0-9_-]{80,}\b/g,/\bpplx-[A-Za-z0-9_-]{20,}\b/g,/\bbastn_[A-Za-z0-9]{16,}\b/g,/\btgp_v1_[A-Za-z0-9_-]{43,}\b/g,/\bflp_[A-Za-z0-9]{10,}\b/g,/\bwfr_[A-Za-z0-9]{20,}\b/g,/\bfwp?_[A-Za-z0-9_-]{20,}\b/g,/\btp-[A-Za-z0-9_-]{20,}\b/g,/\bpsk-[A-Za-z0-9_-]{8,}-[A-Za-z0-9_-]{8,}\b/g,/\b[a-f0-9]{32}\.[A-Za-z0-9]{16}\b/g];function lt(e){return Tp(e.replace(/\b((?:DATABASE|POSTGRES|POSTGRESQL|MYSQL|MARIADB|REDIS|MONGO(?:DB)?|DB)_DSN|CONNECTION_STRING)=("[^"]*"|'[^']*'|[^\s]+(?:\s+[A-Z_][A-Z0-9_]*=[^\s]+)*)/gi,"$1=<redacted>").replace(/\b((?:DATABASE|POSTGRES|POSTGRESQL|MYSQL|MARIADB|REDIS|MONGO(?:DB)?|DB)_(?:URL|URI|CONNECTION_STRING))=("[^"]*"|'[^']*'|[^\s]+)/gi,"$1=<redacted>").replace(/\b([A-Z0-9_]*(?:TOKEN|SECRET|PASSWORD|PASS|KEY|CREDENTIALS)[A-Z0-9_]*)=("[^"]*"|'[^']*'|[^\s]+)/gi,"$1=<redacted>"))}function Tp(e){return Pp.reduce((t,n)=>t.replace(n,"<redacted>"),e.replace(/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/gi,"<redacted>").replace(/((?:(['"])(?:authorization|cookie|x-api-key|api-key)\2|(?:authorization|cookie|x-api-key|api-key))\s*:\s*)(['"])(?:\\[^\r\n]|(?!\3)[^\\\r\n])*\3/gi,"$1$3<redacted>$3").replace(/(['"]?\s*(?:authorization|cookie|x-api-key|api-key)\s*:(?!\s*(?:"<redacted>"|'<redacted>'))\s*)([^'"\r\n]+)(['"]?)/gi,"$1<redacted>$3").replace(/\b([a-z][a-z0-9+.-]*:\/\/)([^\s/:@]+):([^\s@/]+)@/gi,"$1<redacted>:<redacted>@").replace(/\b([a-z][a-z0-9+.-]*:\/\/)([^\s/@:]+)@/gi,"$1<redacted>@").replace(/(^|[\s?&;|])((?:x-amz-signature|x-goog-signature|sig|signature)=)(?:"[^"\r\n]*"|'[^'\r\n]*'|[^&#\s'"`;|<>()]*)/gi,"$1$2<redacted>").replace(/(^|\s)((?:-u|--user)(?:\s+|=))([^\s:]+):([^\s]+)/g,"$1$2<redacted>:<redacted>")).replace(/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\b/g,"<redacted>").replace(/\b(?:AKIA|ASIA)[A-Z0-9]{16}\b/g,"<redacted>")}var Ip={hard_stop:"Do not retry this operation or attempt any workaround (other tools, flags, or paths). Report the block to the user and continue with the rest of the task.",use_alternative:"Do not retry the blocked form. Continue the task using the safer alternative described above.",scope_down:"Retry with a narrower, explicit target as described above. Escalate to the user if the broad operation is truly required.",manual_only:"If this operation is truly needed, ask the user for explicit permission and have them run the command manually.",stop_and_explain:"Do not brute-force variants. Simplify or restructure the command so it can be analyzed, or report the block to the user."};function kp(e){let t=e.maxLen??200,n=e.redact??((o)=>o),r=(o)=>o.length>t?`${o.slice(0,t)}...`:o;return[e.askUser?"CC Safety Net could not verify this command":"BLOCKED by CC Safety Net",`Reason: ${n(e.reason)}`,e.ruleId?`Rule: ${e.ruleId}`:void 0,e.toolName?`Tool: ${e.toolName}`:void 0,e.command?`Command: ${r(n(e.command))}`:void 0,e.segment&&e.segment!==e.command?`Segment: ${r(n(e.segment))}`:void 0,e.configWarning?`Config warning: ${n(e.configWarning)}`:void 0,e.askUser?"Approve only if you expected this command.":Ip[e.intent??"manual_only"]].filter((o)=>o!==void 0).join(`
5
5
 
@@ -45,5 +45,5 @@ var Ci="CC Safety Net could not analyze the command because it exceeds safe anal
45
45
  `).replace(/\\t/g,"\t").replace(/\\r/g,"\r")}function Q_(e,t,n,r,o,i){let s=at(e);if(s.length===0||Ue(s[0]??"").toLowerCase()!=="xargs")return!1;let a=$t(s),l=s.slice(a.childStart);if(l.length===0)return!1;if(a.replacementToken==="")return!1;let c=a.replacementToken,u=c===null?[...l,Xa]:l.map((m)=>m.split(c).join(Xa));return fi(u,t,n,r,o,i).some((m)=>m.target.includes(Xa))}function ew(e){let t=at(e);if(t.length===0)return null;let n=Ue(t[0]??"").toLowerCase();if(!nr(n))return null;return tw(n,t.slice(1))?n:null}function tw(e,t){let n=il(e);for(let r=0;r<t.length;r++){let o=t[r];if(o===void 0)break;if(rp.has(o)||ap(e,o)||/^--(?:eval|exec)=/.test(o))return!1;if(o==="-")return!0;if(o.startsWith("-")){if(n==="python"&&o==="-m")return!1;if(H_.get(n)?.has(o))r++;continue}return!1}return!0}function il(e){return/^python\d/.test(e)?"python":e}function nw(e){let t=[];for(let n of e){if(cp(n))continue;let r=/^[A-Za-z_][A-Za-z0-9_]*=(.*)$/.exec(n);if(r===null)break;if(r[1]!==void 0&&r[1]!=="")t.push(r[1])}return t}var Yf=/^(?:\$\{home\}|\$\{env:(?:userprofile|home)\}|~)(?=[\\/])/i;function rw(e,t){if(!t||!Yf.test(e))return e;return`~${e.replace(Yf,"").replace(/\\/g,"/")}`}function Ke(e,t){if(t==="--")return[];let n=[],r=t.indexOf("=");if(r>0&&r<t.length-1)n.push(t.slice(r+1));if(t.startsWith("-"))return n;if(e==="tar"&&/\.(?:tar|tgz|tar\.gz|zip)$/i.test(t))return n;if(e==="zip"&&/\.zip$/i.test(t))return n;return n.push(t),n}function ow(e){let t=-1,n=!1;for(let r=0;r<e.length;r++){let o=e[r]??"";if(!n&&o==="--"){n=!0;continue}if(n||!/^-(?:[A-Za-z]|-)/.test(o)){if(t===-1)t=r;continue}if(/^--(?:arg|argjson|argfile|rawfile|slurpfile)$/.test(o)){r+=2;continue}if(o==="--indent"||o==="-L"){r++;continue}if(o.startsWith("-L"))continue;if(/^-[srjcCMaSRnbehV]+$/.test(o)||/^--(?:slurp|raw-output0?|join-output|compact-output|color-output|monochrome-output|ascii-output|unbuffered|sort-keys|raw-input|null-input|binary|tab|seq|stream|stream-errors|exit-status|args|jsonargs|help|version|build-configuration)$/.test(o))continue;return e.flatMap((i)=>Ke("jq",i))}return e.flatMap((r,o)=>o===t?[]:Ke("jq",r))}function iw(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n]??"";if(r==="--"||!r.startsWith("-"))return[...t,...k_.has(r)?el("git",e.slice(n).map((i)=>/^-[aeinopqsv]+m$/.test(i)?"-m":i),O_):el("git",e.slice(n),M_)];if(t.push(...Ke("git",r)),!Se.has(r))continue;let o=e[n+1];if(o===void 0)break;t.push(...r==="-c"&&o.includes("=")?[o.slice(o.indexOf("=")+1)]:Ke("git",o)),n++}return t}function el(e,t,n){let r=[];for(let o=0;o<t.length;o++){let i=t[o]??"";if(i==="--")return[...r,...t.slice(o).flatMap((s)=>Ke(e,s))];if(n.has(i)){o++;continue}if(i.includes("=")&&n.has(i.slice(0,i.indexOf("="))))continue;r.push(...Ke(e,i))}return r}function sw(e){return e.flatMap((t,n)=>{let r=lw(t);if(r!==null)return Zf(r.flag,r.value);let o=aw(e[n-1]);return o===null?[]:Zf(o,t)})}function Zf(e,t){if(e==="-F"||e==="--form"){let n=t.indexOf("="),r=n===-1?t:t.slice(n+1);if(!r.startsWith("@")&&!r.startsWith("<"))return[];return Ja(r.slice(1).split(";")[0]??"")}if(e==="--data-urlencode"){let n=t.indexOf("@"),r=t.indexOf("=");if(n===-1||r!==-1&&r<n)return[];return Ja(t.slice(n+1))}return t.startsWith("@")?Ja(t.slice(1)):[]}function aw(e){if(e===void 0)return null;if(np.has(e))return e;return/^-[A-Za-z]+[dF]$/.test(e)?`-${e.slice(-1)}`:null}function lw(e){let t=e.slice(0,2);if(e.length>2&&(t==="-d"||t==="-F"))return{flag:t,value:e.slice(2)};let n=e.indexOf("=");if(n===-1)return null;let r=e.slice(0,n);return np.has(r)?{flag:r,value:e.slice(n+1)}:null}function Ja(e){return e===""||e==="-"?[]:[e]}function cw(e,t,n,r,o,i){let s=e.findIndex((l)=>l.startsWith("-")||l==="("||l==="!"||l===";"),a=[...e.slice(0,s===-1?e.length:s),...e.flatMap((l,c)=>l==="-files0-from"&&e[c+1]!==void 0?[e[c+1]??""]:[])];for(let l=0;l<e.length;l++){if(!E_.has(e[l]??""))continue;let c=e.slice(l+1),u=c.findIndex((f)=>x_.has(f)),m=u===-1?c:c.slice(0,u),d=fi(m,t,n,r,o,i).map((f)=>f.target);if(a.push(...d.filter((f)=>f!=="{}")),!d.includes("{}"))continue;a.push(...e.slice(0,l).flatMap((f,p,g)=>{if(!__.has(f))return[];let h=g[p+1];return h===void 0?[]:[h,h.replace(/^\*+\//,"").replace(/\/\*+$/g,"").replace(/^\*+/,"").replace(/\*+$/g,"")]}))}return a}function uw(e,t,n,r,o,i,s){let a=[];for(let l=0;l<t.length;l++){let c=t[l];if(c===void 0)break;if(rp.has(c)||ap(e,c)){let m=t[l+1];if(m!==void 0)a.push(...di(e,m,n,r,o,i,s)),l++;continue}let u=/^--(?:eval|exec)=(.*)$/.exec(c);if(u!==null&&u[1]!==void 0){a.push(...di(e,u[1],n,r,o,i,s));continue}if(!c.startsWith("-"))a.push({target:c,cwd:i})}return a}function ap(e,t){if(!t.startsWith("-")||t.startsWith("--")||t.length<=2)return!1;return P_.get(t[t.length-1]??"")?.has(il(e))??!1}function dw(e,t,n,r,o,i){if(!e.includes("system"))return[];return fa(e)?.commands.flatMap((s)=>Rn(t.getShellSyntax(s),t,n,r,o,i))??[]}function mw(e){return Array.from(e.matchAll(/\bgetline(?:\s+[A-Za-z_][A-Za-z0-9_]*)?\s*<\s*"((?:\\.|[^"\\])*)"/g)).map((t)=>t[1]).filter((t)=>t!==void 0&&t!=="")}function fw(e){let t=Array.from(e.matchAll(/(['"`])((?:\\.|(?!\1).)*)\1/g)).map((n)=>n[2]).filter((n)=>n!==void 0&&n!=="");return[...t,...t.flatMap(sl),...e.match(Qa)??[]]}function di(e,t,n,r,o,i,s){let a=(g)=>({target:g,cwd:i}),l=gw(t,pw(e));if(l===null)return fw(t).map(a);let c=l.masked.match(jf)!==null||l.literals.some((g)=>Vf.test(l.masked.slice(0,g.start))),u=l.masked.match($_)!==null||l.literals.some((g)=>U_.test(l.masked.slice(0,g.start))),m=r.standard===!0&&!er.has(e),d=m&&!(Cw(l.masked)||c||u)?[]:l.literals,f=m?Array.from(l.masked.matchAll(jf),(g)=>{let h=g.index+g[0].length;return{start:h,end:Ks(l.masked,h)}}):[],p=!m||f.some((g)=>qs(l.masked,g.start))?l.literals:l.literals.filter((g)=>Vf.test(l.masked.slice(0,g.start))||f.some((h)=>g.start>=h.start&&g.start<h.end));return[...d.map((g)=>g.text).filter((g)=>g!=="").map(a),...d.flatMap((g)=>sl(g.text)).map(a),...m?[]:l.literals.flatMap((g)=>g.text.match(Qa)??[]).map(a),...c?p.flatMap((g)=>rl(g.text,n,r,o,i,s)??[a(g.text)]):[],...u?l.literals.flatMap((g)=>di(e,g.text.replace(/\\(.)/g,(h,y)=>y==="n"?`
46
46
  `:y),n,r,o,i,s)):[],...(l.masked.match(Qa)??[]).map(a)]}function pw(e){let t=il(e);if(t==="python")return"python";if(t==="osascript")return"opaque";return t==="node"||t==="bun"||t==="deno"?"javascript":"simple"}function gw(e,t){if(t==="opaque")return null;let n=e.split(""),r=[];for(let o=0;o<e.length;o++){let i=e[o]??"";if(t==="simple"&&(i==="`"||i==="%"||i==="<")){if(z_.test(e.slice(o)))return null}let s=i==="'"||i==='"'||t==="javascript"&&i==="`"?i:null;if(s===null)continue;if(s==="`"&&bw(e,o))return null;let a=t==="python"?hw(e,o):"",l=t==="python"&&e.startsWith(s.repeat(3),o)?s.repeat(3):s,c=o+l.length,u=yw(e,c,l);if(u===null)return null;let m=e.slice(c,u);if(/[fF]/.test(a)&&m.includes("{"))return null;if(t==="simple"&&s==='"'&&B_.test(m))return null;r.push({start:c,text:m});for(let d=o;d<u+l.length;d++)n[d]=" ";o=u+l.length-1}return{masked:n.join(""),literals:r}}function hw(e,t){return G_.exec(e.slice(Math.max(0,t-3),t))?.[1]??""}function yw(e,t,n){let r=n==="`",o=r||n.length===3;for(let i=t;i<e.length;i++){let s=e[i];if(s==="\\"){i++;continue}if(r&&s==="$"&&e[i+1]==="{")return null;if(!o&&(s===`
47
47
  `||s==="\r"))return null;if(e.startsWith(n,i))return i}return null}function bw(e,t){for(let n=t-1;n>=0;n--){let r=e[n];if(!r||/\s/.test(r))continue;return/[\w$\])]/.test(r)}return!1}function Cw(e){for(let t of e.matchAll(/[A-Za-z_$][A-Za-z0-9_$]*/g)){let n=t[0],r=t.index;if(w_.has(n.toLowerCase()))return!0;let o=n.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_$\s]+/).map((i)=>i.toLowerCase());if(!o.some((i)=>A_.has(i)))continue;if(o.length>1)return!0;if(Sw(e,r)===".")return!0;if(vw(e,r+n.length)==="(")return!0}return!1}function Sw(e,t){for(let n=t-1;n>=0;n--)if(!/\s/.test(e[n]??""))return e[n];return}function vw(e,t){for(let n=t;n<e.length;n++)if(!/\s/.test(e[n]??""))return e[n];return}function Ew(e,t,n,r,o,i){return Aw(e).flatMap((s)=>{let a=t.getShellSyntax(s);if(a.status==="invalid")return[];return[...Rn(a,t,{...n,capturedOutput:!0},r,o,i),...xw(a,r)?Rw(a,r).map((l)=>({target:l,cwd:o})):[]]})}function xw(e,t){let n=_o(e);for(let r=0;r<n.length;r++){let o=n[r];if(o?.kind!=="word"||Ue(et(o.text,t)).toLowerCase()!=="base64")continue;for(let i=r+1;i<n.length;i++){let s=n[i];if(s?.kind==="operator")break;if(s?.kind!=="word")continue;let a=et(s.text,t);if(a==="--decode"||!a.startsWith("--")&&a.startsWith("-")&&/[dD]/.test(a))return!0}}return!1}function Rw(e,t){return _o(e).flatMap((n)=>n.kind==="word"?[et(n.text,t)]:n.kind==="redirection"&&n.target?[et(n.target,t)]:[]).flatMap(sl)}function sl(e){let t=ww(e);if(t===null)return[];let n=Buffer.from(t,"base64").toString("utf8");if(n===""||_w(n))return[];return Buffer.from(n,"utf8").toString("base64").replace(/=+$/g,"")===t.replace(/=+$/g,"")?[n]:[]}function _w(e){return Array.from(e).some((t)=>{let n=t.charCodeAt(0);return n<32||n===127})}function ww(e){if(e.length<8||!/^[A-Za-z0-9+/_-]+={0,2}$/.test(e))return null;if(/=/.test(e.replace(/=+$/g,"")))return null;let t=e.replace(/=+$/g,"");if(t.length%4===1)return null;return`${t.replace(/-/g,"+").replace(/_/g,"/")}${"=".repeat((4-t.length%4)%4)}`}function Aw(e){let t=[],n={inSingle:!1,inDouble:!1,escaped:!1};for(let r=0;r<e.length;r++){let o=e[r];if(!o)break;if(Wn(o,n))continue;if(lp(e,r,n)){let i=Pw(e,r+1);if(i!==null)t.push(i.body),r=i.endIndex;continue}if(!n.inSingle&&o==="`"){let i=Tw(e,r);if(i!==null)t.push(i.body),r=i.endIndex}}return t}function Pw(e,t){let n={inSingle:!1,inDouble:!1,escaped:!1},r=1;for(let o=t+1;o<e.length;o++){let i=e[o];if(!i)break;if(Wn(i,n))continue;if(lp(e,o,n)){r++,o++;continue}if(!n.inSingle&&!n.inDouble&&i===")"){if(r--,r===0)return{body:e.slice(t+1,o),endIndex:o}}}return null}function Tw(e,t){let n=!1;for(let r=t+1;r<e.length;r++){let o=e[r];if(!o)break;if(n){n=!1;continue}if(o==="\\"){n=!0;continue}if(o==="`")return{body:e.slice(t+1,r),endIndex:r}}return null}function lp(e,t,n){return!n.inSingle&&e[t]==="$"&&e[t+1]==="("&&e[t+2]!=="("}function Iw(e){let t=[],n=[],r=!1,o=!1,i=!1;for(let l=0;l<e.length;l++){let c=e[l];if(c===void 0)break;if(!i&&c==="--"){i=!0;continue}if(i){n.push(c);continue}let u=/^--([^=]+)(?:=(.*))?$/.exec(c);if(u!==null){let m=u[1]??"",d=u[2];if(m===D_)o=!0;if(L_.has(m))r=!0;if(d!==void 0){if(m===Hf)t.push(d);continue}if(F_.has(m)){let f=e[l+1];if(m===Hf&&f!==void 0)t.push(f);l++}continue}if(c.startsWith("-")&&c.length>1){let m=c.slice(1),d="",f="";for(let g=0;g<m.length;g++){let h=m[g]??"";if(N_.has(h))r=!0;if(W_.has(h)){d=h,f=m.slice(g+1);break}}if(d==="")continue;if(f.length>0){if(d===Uf)t.push(f);continue}let p=e[l+1];if(d===Uf&&p!==void 0)t.push(p);l++;continue}n.push(c)}let a=!r&&!o?n.slice(1):n;return[...t,...a]}function at(e){let t=e.findIndex((n)=>!cp(n)&&!/^[A-Za-z_][A-Za-z0-9_]*=.*/.test(n));return t===-1?[]:e.slice(t)}function cp(e){return e==="env"||e==="command"||e==="builtin"||e==="sudo"}var kw=new Set(["id_rsa.pub","id_ed25519.pub","id_ecdsa.pub"]),Ow=".env.",Mw=new Set([".env.example",".env.sample",".env.template",".env.defaults"]),Dw=[".env.example.",".env.sample."];function Nw(e){let t;try{t=new URL(e.trim())}catch{return!1}return t.protocol!=="file:"&&t.host!==""}function Lw(e){return e.length>0&&!/\s/.test(e)}function tl(e,t,n,r){let o=up(e,t,n,r);return o!==""&&n.paths.entryKind(o)!=="missing"}function up(e,t,n,r){try{return Er(e,t,n,r)}catch(o){if(o instanceof D)throw o;return""}}var Ww=new Set(["node_modules","__pycache__"]),Fw=[["vendor","bundle"],["vendor","cache"]];function Gw(e,t,n,r,o){if(Nw(e))return null;let i=Ve(e,t,r,o);if(!i)return null;let s=G(i.split("/").pop()??""),a=G(i),l=()=>Lw(s)||tl(e,t,r,o);if(Mw.has(s)||Dw.some((d)=>s.startsWith(d)))return null;let c=G(jw(e,t,r,o));for(let d of ls){let f=`~/${d.suffixParts.join("/")}`;if((Jf(a,f)||Jf(c,f))&&st(d.id,n))return d.id}let u=zw(i,t,n,r,o);if(u)return u;if(kw.has(s))return null;for(let d of as)if(s===d.basename&&st(d.id,n))return d.id;if(s.startsWith(Ow)&&st($r.id,n)&&l())return $r.id;for(let d of cs)if(s.length>d.prefix.length&&s.startsWith(d.prefix)){let f=s.slice(d.prefix.length)[0];if((f==="-"||f==="_")&&st(d.id,n)&&l())return d.id}for(let d of us)if(s.length>d.prefix.length&&s.startsWith(d.prefix)){if(s.slice(d.prefix.length)===d.suffix&&st(d.id,n))return d.id}if(Uw(a))return null;if(!s.includes(".")&&Fn.pattern.test(s)&&st(Fn.id,n))return Fn.id;let m=Hw(s,n);if(m)return m;return null}function zw(e,t,n,r,o){return Ur.find((i)=>{if(!st(i.id,n))return!1;switch(i.id){case"secret.cli.claude-code":return W(e,B(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),[".credentials.json"]);case"secret.cli.claude-code.config":{let s=G(e).split("/");return W(e,B(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),["settings.json","settings.local.json"])||vr(e,"~/.claude.json",t,r,o)||s.at(-1)==="settings.local.json"&&s.at(-2)===".claude"||s.at(-1)===".mcp.json"}case"secret.cli.antigravity":return W(e,Ve("~/.gemini/config",t,r,o),["hooks.json","mcp_config.json"]);case"secret.cli.codex":{let s=B(r.env.get("CODEX_HOME"),"~/.codex",t,r,o);return W(e,s,["auth.json",".credentials.json"])||Sr(e,s,["secrets",".sandbox-secrets"])}case"secret.cli.codex.config":{let s=B(r.env.get("CODEX_HOME"),"~/.codex",t,r,o),a=G(e).split("/").at(-1)??"";return W(e,s,["config.toml"])||a.endsWith(".config.toml")&&W(e,s,[a])}case"secret.cli.gemini":return W(e,ce(B(r.env.get("GEMINI_CLI_HOME"),"~",t,r,o),".gemini"),["oauth_creds.json","mcp-oauth-tokens.json","a2a-oauth-tokens.json","gemini-credentials.json"]);case"secret.cli.gemini.config":{let s=G(e).split("/"),a=r.env.get("GEMINI_CLI_SYSTEM_SETTINGS_PATH"),l=r.env.get("ProgramData")?[ce(B(r.env.get("ProgramData"),"",t,r,o),"gemini-cli")]:[];return W(e,ce(B(r.env.get("GEMINI_CLI_HOME"),"~",t,r,o),".gemini"),["settings.json","google_accounts.json"])||s.at(-1)==="settings.json"&&s.at(-2)===".gemini"||(a?.trim()?vr(e,a,t,r,o):!1)||["/Library/Application Support/GeminiCli","/etc/gemini-cli",...l].some((c)=>W(e,Ve(c,t,r,o),["settings.json"]))}case"secret.cli.copilot-cli":{let s=B(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o);return W(e,s,["config.json"])||Sr(e,s,["mcp-oauth-config","mcp-secrets"])}case"secret.cli.copilot-cli.config":return W(e,B(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o),["mcp-config.json"]);case"secret.cli.kimi-code":{let s=B(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),a=B(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o);return W(e,s,["server.token"])||Sr(e,s,["credentials"])||Sr(e,a,["credentials","mcp-oauth"])}case"secret.cli.kimi-code.config":{let s=["config.toml","mcp.json"],a=G(e).split("/");return a.at(-1)==="mcp.json"&&a.at(-2)===".kimi-code"||W(e,B(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),s)||W(e,B(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o),[...s,"config.json","config.json.bak"])}case"secret.cli.opencode":{let s=ce(B(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),"opencode"),a=G(e).split("/").at(-1)??"",l=r.env.get("OPENCODE_DB")?.trim(),c=l&&l!==":memory:"?[l,`${l}-wal`,`${l}-shm`]:[];return W(e,s,["auth.json","mcp-auth.json"])||/^opencode(-.+)?\.db(-wal|-shm)?$/.test(a)&&W(e,s,[a])||c.some((u)=>vr(e,u,t,r,o))}case"secret.cli.opencode.config":{let s=r.env.get("OPENCODE_CONFIG_DIR")?B(r.env.get("OPENCODE_CONFIG_DIR"),"~/.config/opencode",t,r,o):ce(B(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"opencode"),a=r.env.get("ProgramData")?[ce(B(r.env.get("ProgramData"),"",t,r,o),"opencode")]:[],l=["opencode.json","opencode.jsonc"],c=r.env.get("OPENCODE_CONFIG");return l.includes(G(e).split("/").at(-1)??"")||W(e,s,l)||(c?.trim()?vr(e,c,t,r,o):!1)||["/Library/Application Support/opencode","/etc/opencode",...a].some((u)=>W(e,Ve(u,t,r,o),l))}case"secret.cli.pi":return W(e,B(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["auth.json"]);case"secret.cli.pi.config":return W(e,B(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["models.json"]);case"secret.cli.amp":{let s=Ve("~",t,r,o);return[ce(B(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),"amp"),ce(s,".local","share","amp")].some((l)=>W(e,l,["secrets.json"]))||Sr(e,ce(s,".amp"),["oauth"])}case"secret.cli.amp.config":{let s=["settings.json","settings.jsonc"],a=[ce(B(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"amp"),ce(Ve("~",t,r,o),".config","amp")],l=G(e).split("/"),c=r.env.get("AMP_SETTINGS_FILE");return a.some((u)=>W(e,u,s))||l.at(-2)===".amp"&&s.includes(l.at(-1)??"")||(c?.trim()?vr(e,c,t,r,o):!1)}case"secret.cli.cursor":{let s=ce(B(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"cursor"),a=ce(B(r.env.get("CURSOR_DATA_DIR"),"~/.cursor",t,r,o),"projects");return W(e,Ve("~/.cursor",t,r,o),["auth.json"])||W(e,s,["auth.json"])||G(e).split("/").at(-1)==="mcp-auth.json"&&jt(G(e),G(a))}case"secret.cli.cursor.config":{let s=G(e).split("/");return s.at(-1)==="mcp.json"&&s.at(-2)===".cursor"}case"secret.cli.grok-build":return W(e,B(r.env.get("GROK_HOME"),"~/.grok",t,r,o),["auth.json","mcp_credentials.json"]);case"secret.cli.grok-build.config":{let s=G(e).split("/");return s.at(-1)==="config.toml"&&s.at(-2)===".grok"||W(e,B(r.env.get("GROK_HOME"),"~/.grok",t,r,o),["config.toml","managed_config.toml","requirements.toml"])||W(e,Ve("/etc/grok",t,r,o),["managed_config.toml","requirements.toml"])}default:return!1}})?.id??null}var Xf=new WeakMap;function B(e,t,n,r,o){let i=Xf.get(o)??new Map;Xf.set(o,i);let s=`${n}\x00${e??""}\x00${t}`,a=i.get(s);if(a!==void 0)return a;let l=Ve(e?.trim()?e:t,n,r,o);return i.set(s,l),l}function W(e,t,n){return n.some((r)=>dp(e,ce(t,r)))}function Sr(e,t,n){return n.some((r)=>jt(G(e),G(ce(t,r))))}function vr(e,t,n,r,o){return dp(e,Ve(t,n,r,o))}function dp(e,t){return G(e)===G(t)}function ce(e,...t){return $e([e,...t].filter(Boolean).join("/"))}function Bw(e,t,n,r,o,i){if(n.length===0)return!1;let s=G(Er(e,t,o,i));return n.some((a)=>jt(s,G(Er(a,r,o,i))))}function $w(e,t,n,r,o,i){if(n.length===0)return!1;let s=G(Er(e,t,o,i));if(!s)return!1;let a=o.env.get("HOME")??o.home,l=a?$e(z(Ce(a),o.paths,i)):"",c=G(l),u=o.env.get("CC_SAFETY_NET_HOME"),m=G(u?$e(z(mi(Ce(u)),o.paths,i)):l&&$e(z(`${l}/.cc-safety-net`,o.paths,i)));if(m&&jt(s,m))return!1;return n.some((d)=>{let f=gs(d);if(f&&Qf.basename(s)!==G(f.name))return!1;let p=G(Er(f?.root??d,r,o,i));if(!p)return!1;if(c&&(c===p||c.startsWith(p.endsWith("/")?p:`${p}/`)))return!1;return jt(s,p)&&!(f&&s===p)})}function Uw(e){let t=e.split("/");return t.some((n)=>Ww.has(n))||Fw.some(([n,r])=>t.some((o,i)=>o===n&&t[i+1]===r))}function Hw(e,t){let n=e.lastIndexOf("."),r=n>0&&n<e.length-1?e.slice(n+1):"";if(r==="")return null;for(let o of ds)if(r===o.extension&&st(o.id,t))return o.id;for(let o of ms)if(o.pattern.test(r)&&st(o.id,t))return o.id;return null}function G(e){return e.toLowerCase()}function st(e,t){return!t?.disabledRules?.includes(e)}function Ve(e,t,n,r){let{home:o,normalized:i}=al(e,n,r);if(!i)return"";if(!o)return i;let s=ll(i,o),a=ui(s)?s:$e(mi(t,s)),l=$e(z(a,n.paths,r));if(!jt(l,o)){if(ui(s))return l;return l===a?i:l}let c=l.slice(o.length);return c?`~${c}`:"~"}function Jf(e,t){return e===t||e.startsWith(`${t}/`)}function jw(e,t,n,r){let{home:o,normalized:i}=al(e,n,r);if(!i||!o)return"";let s=ll(i,o),a=Qf.normalize(ui(s)?s:$e(mi(t,s))),l=$e(Ce(n.env.get("HOME")??n.home)),c=(d)=>process.platform==="win32"?d.toLowerCase():d,u=[o,l].find((d)=>d!==""&&jt(c(a),c(d)));if(u===void 0)return"";let m=a.slice(u.length);return m?`~${m}`:"~"}function Er(e,t,n,r){let{home:o,normalized:i}=al(e,n,r);if(!i)return"";let s=o?ll(i,o):i;return $e(z(ui(s)?s:mi(t,s),n.paths,r))}function al(e,t,n){let r=t.env.get("HOME")??t.home,o=r?$e(z(Ce(r),t.paths,n)):"",i=$e(Ce(Vw(et(e,t))));return{home:o,normalized:i}}function Vw(e){if(!e.trim().toLowerCase().startsWith("file:"))return e;try{return C_(e)}catch{return e}}function ll(e,t){if(e==="~")return t;if(e.startsWith("~/"))return ce(t,e.slice(2));return e}function Kw(e){if(process.platform==="win32")return!0;return b_.parse(e).root.length>1}function $e(e){let t=e.trim(),n=(t.includes("\\")&&Kw(t)?t.replace(/\\/g,"/"):t).replace(/\/{2,}/g,"/").replace(/^\.\//,"");if(n==="/")return n;return n.replace(/\/+$/g,"")}function jt(e,t){return e===t||e.startsWith(t.endsWith("/")?t:`${t}/`)}function Ue(e){return e.split(/[\\/]/).pop()?.replace(/\.exe$/i,"")??e}class Vt extends Error{stage;evaluation;name="GuardEvaluationError";constructor(e,t,n){super(`CC Safety Net ${e} dependency failed`,{cause:n});this.stage=e;this.evaluation=t}}var qw={findPolicyMutation:zf,findGitMetadataMutation:bd,resolveGitMetadata:Yw,loadPolicySnapshot:iu,findSensitiveTarget:op,analyzeCommand:kf,getModes:Li};function mp(e,t){let n={...qw,...t.dependencies},r=Jw(e),o=xr(e)?e.command:r,i=vt("policy-protection",o,()=>rr(e)),s=ge(i,"input-candidate"),a=ge(i,"declared-command");if(xr(e)&&e.command?.trim()&&a?.program.status==="limited")return{stage:"command-analysis",decision:{kind:"deny",reason:He,intent:"stop_and_explain",evidence:{command:e.command,segment:e.command}}};if(s?.program.status==="limited")return{stage:"command-validation",decision:{kind:"deny",reason:Wd,intent:"stop_and_explain"}};let l=be(),c=vt("policy-protection",o,()=>n.resolveGitMetadata([e.context.executionCwd,e.context.configCwd],t.environment)),u=vt("policy-protection",o,()=>n.findPolicyMutation(i,t.environment,l));if(u){let E=o??u.target;return{stage:"policy-protection",decision:{kind:"deny",reason:Gf,intent:"hard_stop",evidence:{command:E,segment:u.target}}}}let m=vt("policy-protection",o,()=>Nf(i,t.environment,l));if(m){let E=o??m.target;return{stage:"policy-protection",decision:{kind:"deny",reason:Df,intent:"hard_stop",evidence:{command:E,segment:m.target}}}}let d=vt("policy-protection",o,()=>n.findGitMetadataMutation(i,c,t.environment,l));if(d){let E=o??d.target;return{stage:"policy-protection",decision:{kind:"deny",reason:Te,intent:"hard_stop",evidence:{command:E,segment:d.target}}}}let f=vt("config-load",o,()=>n.loadPolicySnapshot(t.environment,{...t.policyOptions,cwd:e.context.configCwd})),p=f.policy,g=n.getModes(p,t.environment.env),h={level:g.effectiveLevel,...Zw(f)},y=p.secretProtection.enabled===!1?null:vt("secret-protection",o,()=>n.findSensitiveTarget(i,p.secretProtection,t.environment,l,{strict:xr(e)||s?.program.dialect==="powershell"?g.strict:void 0}));if(y){let E=o??y.target;return{stage:"secret-protection",...h,decision:{kind:"deny",reason:ep,intent:"hard_stop",ruleId:y.ruleId,evidence:{command:E,segment:y.target}}}}if(!xr(e))return{stage:"non-command",...h,decision:{kind:"allow"}};if(!e.command||e.command.trim()==="")return{...cl("command-validation",o),...h};let S=vt("command-analysis",o,()=>Of(()=>n.analyzeCommand(e.command,{cwd:e.context.executionCwd,shell:e.route.shell,policySnapshot:f,environment:t.environment,protectedGitMetadata:c,effectiveCapabilities:g.capabilities,strict:g.strict,paranoidRm:g.paranoidRm,paranoidInterpreters:g.paranoidInterpreters,worktreeMode:g.worktreeMode,budget:l,...t.trace?{trace:t.trace}:{}},Xw(i),i.store),e.command,t.trace));if(S.decision){let E=!g.strict&&S.decision.kind==="deny"&&(S.decision.ruleId==="raw-text.dangerous-command"||S.decision.reason===ar&&!/^(?:\S*\/)?(?:ba|da|z|k)?sh(?:\s+-[A-Za-z-]*)*$/.test(S.decision.evidence?.segment??"")&&Ae(e.command)===null);return{stage:"command-analysis",...h,..."errorCode"in S?{errorCode:S.errorCode}:{},decision:E?{...S.decision,ask:!0}:S.decision}}return{stage:"command-analysis",...h,decision:{kind:"allow"}}}function Yw(e,t){let n=[...new Set(e.filter((r)=>typeof r==="string"&&r!==""))].flatMap((r)=>t.gitMetadata(r)??[]);if(n.length===0)return null;return Object.freeze({entries:Object.freeze([...new Set(n.flatMap((r)=>r.entries))]),markerFiles:Object.freeze([...new Set(n.flatMap((r)=>r.markerFiles))]),directories:Object.freeze([...new Set(n.flatMap((r)=>r.directories))]),hooksDirectories:Object.freeze([...new Set(n.flatMap((r)=>r.hooksDirectories))])})}function Zw(e){if(e.state==="ready")return{};return{configFallback:{reason:e.reason}}}function Xw(e){return ge(e,"declared-command")?.program}function Jw(e){try{return In(e.input)}catch(t){let n=xr(e)?e.command:void 0;throw new Vt("policy-protection",cl("policy-protection",t instanceof Ye?void 0:n,t),t)}}function vt(e,t,n){try{return n()}catch(r){throw new Vt(e,cl(e,r instanceof Ye?void 0:t,r),r)}}function cl(e,t,n){let r=n instanceof D||n instanceof Fe;return{stage:e,decision:{kind:"deny",reason:r?Ci:wn,intent:"stop_and_explain",...t?{evidence:{command:t,segment:t}}:{}}}}function xr(e){return e.route.kind==="command"}import{appendFileSync as dA,mkdirSync as mA}from"fs";import{isAbsolute as fA,join as ml}from"path";import{lstatSync as pp,readdirSync as Qw,readFileSync as eA,rmdirSync as tA,statSync as gp,unlinkSync as nA,utimesSync as rA,writeFileSync as oA}from"fs";import{join as Rr}from"path";function fp(e,t={}){return Jr(en(e,t),e.home).policy.audit.retention_days}var dl=86400000,iA=".last-prune",sA=/^\d{4}-\d{2}$/,aA=/^((\d{4}-\d{2})-\d{2})-.+\.jsonl$/,hp=(e)=>Math.floor(e/dl);function bp(e,t,n=()=>new Date){try{let r=n().getTime();if(!gp(t,{throwIfNoEntry:!1})?.isDirectory())return;let o=Rr(t,iA),i=gp(o,{throwIfNoEntry:!1})?.mtimeMs;if(i!==void 0&&hp(i)===hp(r))return;let s=r-fp(e)*dl,a=new Date(r).toISOString().slice(0,7);for(let l of ul(t)){if(l.isDirectory()){lA(Rr(t,l.name),s,a);continue}if(l.isFile()&&l.name.endsWith(".jsonl"))cA(Rr(t,l.name),s)}oA(o,"",{mode:384}),rA(o,r/1000,r/1000)}catch{}}function lA(e,t,n){for(let r of ul(e)){if(!r.isDirectory()||!sA.test(r.name))continue;let o=Rr(e,r.name);for(let i of ul(o)){if(!i.isFile())continue;let s=aA.exec(i.name);if(!s||s[2]!==r.name)continue;let a=Date.parse(`${s[1]}T00:00:00.000Z`)+dl;if(!Number.isFinite(a)||a>=t)continue;Cp(Rr(o,i.name))}if(r.name!==n)yp(o)}yp(e)}function cA(e,t){try{let n=pp(e);if(n.mtimeMs>=t)return;let r=eA(e,"utf-8").split(`
48
- `).filter((o)=>o.trim()).map(uA);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(pp(e).mtimeMs!==n.mtimeMs)return;Cp(e)}catch{}}function uA(e){try{let t=JSON.parse(e).ts,n=typeof t==="string"?Date.parse(t):Number.NaN;return Number.isFinite(n)?n:void 0}catch{return}}function ul(e){try{return Qw(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Cp(e){try{nA(e)}catch{}}function yp(e){try{tA(e)}catch{}}var pA="2.4.8",gA=1e4,hA=2000,yA=256,bA=32768;function CA(e){let t=e.trim();if(!t)return null;let n=t.replace(/[^A-Za-z0-9_.-]+/g,"_");if(n=n.replace(/^[._-]+|[._-]+$/g,"").slice(0,128),!n||n==="."||n==="..")return null;return n}function SA(e){return(e??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function fl(e,t,n,r,o,i,s={}){let a=CA(t);if(!a)return;let l=EA(e);if(!l)return;try{let c=(s.now??(()=>new Date))().toISOString(),u=pi(lt(n),s.failureStage?Number.POSITIVE_INFINITY:gA),m=pi(lt(r),hA),d=s.toolName?pi(lt(s.toolName),yA):void 0,f=i===null?void 0:pi(lt(i),bA),p=ml(l,SA(f?.value??null),c.slice(0,7));mA(p,{recursive:!0,mode:448});let g=ml(p,`${c.slice(0,10)}-${a}.jsonl`),h={ts:c,id:(s.createId??Fi)(),v:pA,sessionId:a,decision:s.decision??"deny",agent:s.agent,shape:s.shape,level:s.level,configFallback:s.configFallback,toolName:d?.value,command:u.value,segment:m.value,...u.truncated||m.truncated||d?.truncated||f?.truncated?{truncated:!0}:{},reason:o,ruleId:s.ruleId,intent:s.intent,failureStage:s.failureStage,errorCode:s.errorCode,cwd:f?.value??null};dA(g,`${JSON.stringify(h)}
48
+ `).filter((o)=>o.trim()).map(uA);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(pp(e).mtimeMs!==n.mtimeMs)return;Cp(e)}catch{}}function uA(e){try{let t=JSON.parse(e).ts,n=typeof t==="string"?Date.parse(t):Number.NaN;return Number.isFinite(n)?n:void 0}catch{return}}function ul(e){try{return Qw(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Cp(e){try{nA(e)}catch{}}function yp(e){try{tA(e)}catch{}}var pA="2.4.10",gA=1e4,hA=2000,yA=256,bA=32768;function CA(e){let t=e.trim();if(!t)return null;let n=t.replace(/[^A-Za-z0-9_.-]+/g,"_");if(n=n.replace(/^[._-]+|[._-]+$/g,"").slice(0,128),!n||n==="."||n==="..")return null;return n}function SA(e){return(e??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function fl(e,t,n,r,o,i,s={}){let a=CA(t);if(!a)return;let l=EA(e);if(!l)return;try{let c=(s.now??(()=>new Date))().toISOString(),u=pi(lt(n),s.failureStage?Number.POSITIVE_INFINITY:gA),m=pi(lt(r),hA),d=s.toolName?pi(lt(s.toolName),yA):void 0,f=i===null?void 0:pi(lt(i),bA),p=ml(l,SA(f?.value??null),c.slice(0,7));mA(p,{recursive:!0,mode:448});let g=ml(p,`${c.slice(0,10)}-${a}.jsonl`),h={ts:c,id:(s.createId??Fi)(),v:pA,sessionId:a,decision:s.decision??"deny",agent:s.agent,shape:s.shape,level:s.level,configFallback:s.configFallback,toolName:d?.value,command:u.value,segment:m.value,...u.truncated||m.truncated||d?.truncated||f?.truncated?{truncated:!0}:{},reason:o,ruleId:s.ruleId,intent:s.intent,failureStage:s.failureStage,errorCode:s.errorCode,cwd:f?.value??null};dA(g,`${JSON.stringify(h)}
49
49
  `,{encoding:"utf-8",mode:384}),bp(e,l,s.now)}catch{}}function pi(e,t){return{value:e.slice(0,t),truncated:e.length>t}}function vA(e){let t=e.env.get("CC_SAFETY_NET_AUDIT_HOME");if(e.env.get("NODE_ENV")==="test"&&!t)return null;let n=t||e.home;return n&&fA(n)?n:null}function EA(e){let t=vA(e);return t?ml(t,".cc-safety-net","logs"):null}function vp(e,t,n,r=!0,o){if(t.decision.kind==="allow"){if(!n||e.route.kind!=="command")return;let a=Sp(e);return{decision:"allow",command:a,segment:a,reason:"allowed",cwd:e.context.executionCwd,toolName:e.toolName,level:t.level,...t.configFallback?{configFallback:!0}:{}}}let i=t.decision.evidence,s=i?.command??(r?Sp(e):"");return{decision:"deny",command:s,segment:i?.segment??s,reason:t.decision.reason,cwd:e.context.executionCwd,toolName:e.toolName,level:t.level,...t.configFallback?{configFallback:!0}:{},ruleId:t.decision.ruleId,intent:t.decision.intent,failureStage:o?.stage,errorCode:o?.errorCode}}function Sp(e){return"command"in e?e.command??"":""}function Ep(e,t,n,r){if(!t)return;let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;fl(e,o,t.command,t.segment,t.reason,t.cwd,{decision:t.decision,agent:r.agent,shape:r.shape,level:t.level,configFallback:t.configFallback,toolName:t.toolName,ruleId:t.ruleId,intent:t.intent,failureStage:t.failureStage,errorCode:t.errorCode})}function xp(e,t,n,r){let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;fl(e,o,t.command??"",t.segment??t.command??"",t.reason,r.cwd??null,{decision:"deny",agent:r.agent,shape:r.shape,toolName:r.toolName??t.toolName,ruleId:t.ruleId,intent:t.intent})}function _p(e,t,n){try{let r=mp(t,{environment:e,...n.guard});return Rp(e,t,r,n),r}catch(r){if(!(r instanceof Vt))throw r;throw Rp(e,t,r.evaluation,n,!(r.cause instanceof Ye),{stage:r.stage,errorCode:xA(r.cause)}),r}}function Rp(e,t,n,r,o=!0,i){Ep(e,vp(t,n,r.guard?.auditAllowed??!1,o,i),r.audit.getSessionId,{agent:r.audit.agent,shape:r.audit.shape})}function xA(e){if(e instanceof D)return V[e.kind].errorCode;if(e instanceof Ye)return"tool-input-limit";if(e instanceof Fe)return"structural-shell-syntax-limit";return"unexpected-error"}function Kt(e,t={}){return{malformed:!0,denial:An(t),cwd:e}}function wp(e,t={}){return(n,r)=>{try{return RA(n,r,e,t)}catch(o){return console.error("CC Safety Net error:",o),e.block(An())}}}function RA(e,t,n,r){let o=Zl();if(n.cancelled?.(t))return n.block(An());let i=n.extract(e,t,o.paths);if(!i)return n.allow;let s=()=>n.getSessionId(e,t);if("malformed"in i)return xp(o,i.denial,s,{agent:n.agent,toolName:i.denial.toolName,cwd:i.cwd}),n.block(i.denial);let a=(l,c)=>{let u=yl(l,{includeEvidence:c});return u?n.block(u):n.allow};try{let l=_p(o,i,{guard:{auditAllowed:Xl(o.env),policyOptions:r.policyOptions,dependencies:r.guardDependencies},audit:{agent:n.agent,getSessionId:s}});return a(l,!0)}catch(l){if(!(l instanceof Vt))throw l;if(xt(Q.debug,o.env))console.error(`CC Safety Net debug: ${n.debugLabel} analysis failed: ${Cl(l.cause)}`);return a(l.evaluation,n.includeEvidenceOnError(i))}}var _A={agent:"amp",debugLabel:"amp tool.call",extract:(e,t,n)=>AA(e,t,n),getSessionId:(e)=>IA(e),allow:{action:"allow"},block:(e)=>kA(e),includeEvidenceOnError:(e)=>e.route.kind==="command"},Ap=wA();function wA(e={}){return wp(_A,e)}function AA(e,t,n){if(!e||typeof e!=="object")return Kt(null);let r=e;if(typeof r.tool!=="string"||r.tool.trim()==="")return Kt(null);if(!r.input||typeof r.input!=="object")return Kt(null,{toolName:r.tool});let o=PA(t,n);if(!o)return Kt(null,{toolName:r.tool});let i=TA(t,e);if(!i.ok)return Kt(o,{toolName:r.tool});if(!i.command)return Yt(r.tool,r.input,{kind:xi(r.tool)},{configCwd:o,executionCwd:o},null);if(typeof i.command.command!=="string"||i.command.command.trim()==="")return Kt(o,{toolName:r.tool});let s=typeof i.command.dir==="string"?Ul(i.command.dir,o,n):o;if(!s)return{malformed:!0,denial:{reason:"CC Safety Net could not use the requested working directory because it does not exist, is inaccessible, is not a directory, or uses an unsupported path form. Use an existing accessible working directory. If the requested directory is missing, create it from an accessible location before retrying the command.",intent:"use_alternative",command:i.command.command,segment:i.command.dir,toolName:r.tool},cwd:o};return Yt(r.tool,r.input,{kind:"command",shell:"posix"},{configCwd:o,executionCwd:s},i.command.command)}function PA(e,t){let n=e.system.workspaceRoot;if(!n)return;try{let r=e.helpers.filePathFromURI(n);if(typeof r!=="string"||r.trim()==="")return;return $l(".",[r],t)}catch{return}}function TA(e,t){try{return{ok:!0,command:e.helpers.shellCommandFromToolCall(t)}}catch{return{ok:!1}}}function IA(e){if(!e||typeof e!=="object")return;let t=e.thread?.id;return typeof t==="string"&&t.trim()!==""?t:void 0}function kA(e){return{action:"reject-and-continue",message:bl(e)}}function OA(e){e.on("tool.call",(t)=>Ap(t,e))}export{OA as default};
package/dist/bin/hook.js CHANGED
@@ -43,5 +43,5 @@ var qp=["-h","--help"];function Kr(e,t){let n=Object.entries(e.booleans??{}),r=O
43
43
  `).replace(/\\t/g,"\t").replace(/\\r/g,"\r")}function P_(e,t,n,r,o,i){let s=wt(e);if(s.length===0||ot(s[0]??"").toLowerCase()!=="xargs")return!1;let a=sn(s),l=s.slice(a.childStart);if(l.length===0)return!1;if(a.replacementToken==="")return!1;let c=a.replacementToken,u=c===null?[...l,cl]:l.map((m)=>m.split(c).join(cl));return Mi(u,t,n,r,o,i).some((m)=>m.target.includes(cl))}function T_(e){let t=wt(e);if(t.length===0)return null;let n=ot(t[0]??"").toLowerCase();if(!xr(n))return null;return I_(n,t.slice(1))?n:null}function I_(e,t){let n=yl(e);for(let r=0;r<t.length;r++){let o=t[r];if(o===void 0)break;if(lp.has(o)||mp(e,o)||/^--(?:eval|exec)=/.test(o))return!1;if(o==="-")return!0;if(o.startsWith("-")){if(n==="python"&&o==="-m")return!1;if(b_.get(n)?.has(o))r++;continue}return!1}return!0}function yl(e){return/^python\d/.test(e)?"python":e}function k_(e){let t=[];for(let n of e){if(pp(n))continue;let r=/^[A-Za-z_][A-Za-z0-9_]*=(.*)$/.exec(n);if(r===null)break;if(r[1]!==void 0&&r[1]!=="")t.push(r[1])}return t}var ep=/^(?:\$\{home\}|\$\{env:(?:userprofile|home)\}|~)(?=[\\/])/i;function O_(e,t){if(!t||!ep.test(e))return e;return`~${e.replace(ep,"").replace(/\\/g,"/")}`}function ct(e,t){if(t==="--")return[];let n=[],r=t.indexOf("=");if(r>0&&r<t.length-1)n.push(t.slice(r+1));if(t.startsWith("-"))return n;if(e==="tar"&&/\.(?:tar|tgz|tar\.gz|zip)$/i.test(t))return n;if(e==="zip"&&/\.zip$/i.test(t))return n;return n.push(t),n}function M_(e){let t=-1,n=!1;for(let r=0;r<e.length;r++){let o=e[r]??"";if(!n&&o==="--"){n=!0;continue}if(n||!/^-(?:[A-Za-z]|-)/.test(o)){if(t===-1)t=r;continue}if(/^--(?:arg|argjson|argfile|rawfile|slurpfile)$/.test(o)){r+=2;continue}if(o==="--indent"||o==="-L"){r++;continue}if(o.startsWith("-L"))continue;if(/^-[srjcCMaSRnbehV]+$/.test(o)||/^--(?:slurp|raw-output0?|join-output|compact-output|color-output|monochrome-output|ascii-output|unbuffered|sort-keys|raw-input|null-input|binary|tab|seq|stream|stream-errors|exit-status|args|jsonargs|help|version|build-configuration)$/.test(o))continue;return e.flatMap((i)=>ct("jq",i))}return e.flatMap((r,o)=>o===t?[]:ct("jq",r))}function D_(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n]??"";if(r==="--"||!r.startsWith("-"))return[...t,...s_.has(r)?ml("git",e.slice(n).map((i)=>/^-[aeinopqsv]+m$/.test(i)?"-m":i),a_):ml("git",e.slice(n),l_)];if(t.push(...ct("git",r)),!Me.has(r))continue;let o=e[n+1];if(o===void 0)break;t.push(...r==="-c"&&o.includes("=")?[o.slice(o.indexOf("=")+1)]:ct("git",o)),n++}return t}function ml(e,t,n){let r=[];for(let o=0;o<t.length;o++){let i=t[o]??"";if(i==="--")return[...r,...t.slice(o).flatMap((s)=>ct(e,s))];if(n.has(i)){o++;continue}if(i.includes("=")&&n.has(i.slice(0,i.indexOf("="))))continue;r.push(...ct(e,i))}return r}function N_(e){return e.flatMap((t,n)=>{let r=W_(t);if(r!==null)return tp(r.flag,r.value);let o=L_(e[n-1]);return o===null?[]:tp(o,t)})}function tp(e,t){if(e==="-F"||e==="--form"){let n=t.indexOf("="),r=n===-1?t:t.slice(n+1);if(!r.startsWith("@")&&!r.startsWith("<"))return[];return ul(r.slice(1).split(";")[0]??"")}if(e==="--data-urlencode"){let n=t.indexOf("@"),r=t.indexOf("=");if(n===-1||r!==-1&&r<n)return[];return ul(t.slice(n+1))}return t.startsWith("@")?ul(t.slice(1)):[]}function L_(e){if(e===void 0)return null;if(ap.has(e))return e;return/^-[A-Za-z]+[dF]$/.test(e)?`-${e.slice(-1)}`:null}function W_(e){let t=e.slice(0,2);if(e.length>2&&(t==="-d"||t==="-F"))return{flag:t,value:e.slice(2)};let n=e.indexOf("=");if(n===-1)return null;let r=e.slice(0,n);return ap.has(r)?{flag:r,value:e.slice(n+1)}:null}function ul(e){return e===""||e==="-"?[]:[e]}function G_(e,t,n,r,o,i){let s=e.findIndex((l)=>l.startsWith("-")||l==="("||l==="!"||l===";"),a=[...e.slice(0,s===-1?e.length:s),...e.flatMap((l,c)=>l==="-files0-from"&&e[c+1]!==void 0?[e[c+1]??""]:[])];for(let l=0;l<e.length;l++){if(!XR.has(e[l]??""))continue;let c=e.slice(l+1),u=c.findIndex((f)=>JR.has(f)),m=u===-1?c:c.slice(0,u),d=Mi(m,t,n,r,o,i).map((f)=>f.target);if(a.push(...d.filter((f)=>f!=="{}")),!d.includes("{}"))continue;a.push(...e.slice(0,l).flatMap((f,p,g)=>{if(!e_.has(f))return[];let h=g[p+1];return h===void 0?[]:[h,h.replace(/^\*+\//,"").replace(/\/\*+$/g,"").replace(/^\*+/,"").replace(/\*+$/g,"")]}))}return a}function F_(e,t,n,r,o,i,s){let a=[];for(let l=0;l<t.length;l++){let c=t[l];if(c===void 0)break;if(lp.has(c)||mp(e,c)){let m=t[l+1];if(m!==void 0)a.push(...Oi(e,m,n,r,o,i,s)),l++;continue}let u=/^--(?:eval|exec)=(.*)$/.exec(c);if(u!==null&&u[1]!==void 0){a.push(...Oi(e,u[1],n,r,o,i,s));continue}if(!c.startsWith("-"))a.push({target:c,cwd:i})}return a}function mp(e,t){if(!t.startsWith("-")||t.startsWith("--")||t.length<=2)return!1;return r_.get(t[t.length-1]??"")?.has(yl(e))??!1}function z_(e,t,n,r,o,i){if(!e.includes("system"))return[];return _a(e)?.commands.flatMap((s)=>Bn(t.getShellSyntax(s),t,n,r,o,i))??[]}function H_(e){return Array.from(e.matchAll(/\bgetline(?:\s+[A-Za-z_][A-Za-z0-9_]*)?\s*<\s*"((?:\\.|[^"\\])*)"/g)).map((t)=>t[1]).filter((t)=>t!==void 0&&t!=="")}function B_(e){let t=Array.from(e.matchAll(/(['"`])((?:\\.|(?!\1).)*)\1/g)).map((n)=>n[2]).filter((n)=>n!==void 0&&n!=="");return[...t,...t.flatMap(Cl),...e.match(dl)??[]]}function Oi(e,t,n,r,o,i,s){let a=(g)=>({target:g,cwd:i}),l=$_(t,U_(e));if(l===null)return B_(t).map(a);let c=l.masked.match(Zf)!==null||l.literals.some((g)=>Xf.test(l.masked.slice(0,g.start))),u=l.masked.match(y_)!==null||l.literals.some((g)=>C_.test(l.masked.slice(0,g.start))),m=r.standard===!0&&!vr.has(e),d=m&&!(q_(l.masked)||c||u)?[]:l.literals,f=m?Array.from(l.masked.matchAll(Zf),(g)=>{let h=g.index+g[0].length;return{start:h,end:sa(l.masked,h)}}):[],p=!m||f.some((g)=>aa(l.masked,g.start))?l.literals:l.literals.filter((g)=>Xf.test(l.masked.slice(0,g.start))||f.some((h)=>g.start>=h.start&&g.start<h.end));return[...d.map((g)=>g.text).filter((g)=>g!=="").map(a),...d.flatMap((g)=>Cl(g.text)).map(a),...m?[]:l.literals.flatMap((g)=>g.text.match(dl)??[]).map(a),...c?p.flatMap((g)=>gl(g.text,n,r,o,i,s)??[a(g.text)]):[],...u?l.literals.flatMap((g)=>Oi(e,g.text.replace(/\\(.)/g,(h,y)=>y==="n"?`
44
44
  `:y),n,r,o,i,s)):[],...(l.masked.match(dl)??[]).map(a)]}function U_(e){let t=yl(e);if(t==="python")return"python";if(t==="osascript")return"opaque";return t==="node"||t==="bun"||t==="deno"?"javascript":"simple"}function $_(e,t){if(t==="opaque")return null;let n=e.split(""),r=[];for(let o=0;o<e.length;o++){let i=e[o]??"";if(t==="simple"&&(i==="`"||i==="%"||i==="<")){if(g_.test(e.slice(o)))return null}let s=i==="'"||i==='"'||t==="javascript"&&i==="`"?i:null;if(s===null)continue;if(s==="`"&&K_(e,o))return null;let a=t==="python"?j_(e,o):"",l=t==="python"&&e.startsWith(s.repeat(3),o)?s.repeat(3):s,c=o+l.length,u=V_(e,c,l);if(u===null)return null;let m=e.slice(c,u);if(/[fF]/.test(a)&&m.includes("{"))return null;if(t==="simple"&&s==='"'&&h_.test(m))return null;r.push({start:c,text:m});for(let d=o;d<u+l.length;d++)n[d]=" ";o=u+l.length-1}return{masked:n.join(""),literals:r}}function j_(e,t){return p_.exec(e.slice(Math.max(0,t-3),t))?.[1]??""}function V_(e,t,n){let r=n==="`",o=r||n.length===3;for(let i=t;i<e.length;i++){let s=e[i];if(s==="\\"){i++;continue}if(r&&s==="$"&&e[i+1]==="{")return null;if(!o&&(s===`
45
45
  `||s==="\r"))return null;if(e.startsWith(n,i))return i}return null}function K_(e,t){for(let n=t-1;n>=0;n--){let r=e[n];if(!r||/\s/.test(r))continue;return/[\w$\])]/.test(r)}return!1}function q_(e){for(let t of e.matchAll(/[A-Za-z_$][A-Za-z0-9_$]*/g)){let n=t[0],r=t.index;if(t_.has(n.toLowerCase()))return!0;let o=n.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_$\s]+/).map((i)=>i.toLowerCase());if(!o.some((i)=>n_.has(i)))continue;if(o.length>1)return!0;if(Y_(e,r)===".")return!0;if(Z_(e,r+n.length)==="(")return!0}return!1}function Y_(e,t){for(let n=t-1;n>=0;n--)if(!/\s/.test(e[n]??""))return e[n];return}function Z_(e,t){for(let n=t;n<e.length;n++)if(!/\s/.test(e[n]??""))return e[n];return}function X_(e,t,n,r,o,i){return nw(e).flatMap((s)=>{let a=t.getShellSyntax(s);if(a.status==="invalid")return[];return[...Bn(a,t,{...n,capturedOutput:!0},r,o,i),...J_(a,r)?Q_(a,r).map((l)=>({target:l,cwd:o})):[]]})}function J_(e,t){let n=Yo(e);for(let r=0;r<n.length;r++){let o=n[r];if(o?.kind!=="word"||ot(Ct(o.text,t)).toLowerCase()!=="base64")continue;for(let i=r+1;i<n.length;i++){let s=n[i];if(s?.kind==="operator")break;if(s?.kind!=="word")continue;let a=Ct(s.text,t);if(a==="--decode"||!a.startsWith("--")&&a.startsWith("-")&&/[dD]/.test(a))return!0}}return!1}function Q_(e,t){return Yo(e).flatMap((n)=>n.kind==="word"?[Ct(n.text,t)]:n.kind==="redirection"&&n.target?[Ct(n.target,t)]:[]).flatMap(Cl)}function Cl(e){let t=tw(e);if(t===null)return[];let n=Buffer.from(t,"base64").toString("utf8");if(n===""||ew(n))return[];return Buffer.from(n,"utf8").toString("base64").replace(/=+$/g,"")===t.replace(/=+$/g,"")?[n]:[]}function ew(e){return Array.from(e).some((t)=>{let n=t.charCodeAt(0);return n<32||n===127})}function tw(e){if(e.length<8||!/^[A-Za-z0-9+/_-]+={0,2}$/.test(e))return null;if(/=/.test(e.replace(/=+$/g,"")))return null;let t=e.replace(/=+$/g,"");if(t.length%4===1)return null;return`${t.replace(/-/g,"+").replace(/_/g,"/")}${"=".repeat((4-t.length%4)%4)}`}function nw(e){let t=[],n={inSingle:!1,inDouble:!1,escaped:!1};for(let r=0;r<e.length;r++){let o=e[r];if(!o)break;if(tr(o,n))continue;if(fp(e,r,n)){let i=rw(e,r+1);if(i!==null)t.push(i.body),r=i.endIndex;continue}if(!n.inSingle&&o==="`"){let i=ow(e,r);if(i!==null)t.push(i.body),r=i.endIndex}}return t}function rw(e,t){let n={inSingle:!1,inDouble:!1,escaped:!1},r=1;for(let o=t+1;o<e.length;o++){let i=e[o];if(!i)break;if(tr(i,n))continue;if(fp(e,o,n)){r++,o++;continue}if(!n.inSingle&&!n.inDouble&&i===")"){if(r--,r===0)return{body:e.slice(t+1,o),endIndex:o}}}return null}function ow(e,t){let n=!1;for(let r=t+1;r<e.length;r++){let o=e[r];if(!o)break;if(n){n=!1;continue}if(o==="\\"){n=!0;continue}if(o==="`")return{body:e.slice(t+1,r),endIndex:r}}return null}function fp(e,t,n){return!n.inSingle&&e[t]==="$"&&e[t+1]==="("&&e[t+2]!=="("}function iw(e){let t=[],n=[],r=!1,o=!1,i=!1;for(let l=0;l<e.length;l++){let c=e[l];if(c===void 0)break;if(!i&&c==="--"){i=!0;continue}if(i){n.push(c);continue}let u=/^--([^=]+)(?:=(.*))?$/.exec(c);if(u!==null){let m=u[1]??"",d=u[2];if(m===c_)o=!0;if(d_.has(m))r=!0;if(d!==void 0){if(m===Yf)t.push(d);continue}if(f_.has(m)){let f=e[l+1];if(m===Yf&&f!==void 0)t.push(f);l++}continue}if(c.startsWith("-")&&c.length>1){let m=c.slice(1),d="",f="";for(let g=0;g<m.length;g++){let h=m[g]??"";if(u_.has(h))r=!0;if(m_.has(h)){d=h,f=m.slice(g+1);break}}if(d==="")continue;if(f.length>0){if(d===qf)t.push(f);continue}let p=e[l+1];if(d===qf&&p!==void 0)t.push(p);l++;continue}n.push(c)}let a=!r&&!o?n.slice(1):n;return[...t,...a]}function wt(e){let t=e.findIndex((n)=>!pp(n)&&!/^[A-Za-z_][A-Za-z0-9_]*=.*/.test(n));return t===-1?[]:e.slice(t)}function pp(e){return e==="env"||e==="command"||e==="builtin"||e==="sudo"}var sw=new Set(["id_rsa.pub","id_ed25519.pub","id_ecdsa.pub"]),aw=".env.",lw=new Set([".env.example",".env.sample",".env.template",".env.defaults"]),cw=[".env.example.",".env.sample."];function uw(e){let t;try{t=new URL(e.trim())}catch{return!1}return t.protocol!=="file:"&&t.host!==""}function dw(e){return e.length>0&&!/\s/.test(e)}function fl(e,t,n,r){let o=gp(e,t,n,r);return o!==""&&n.paths.entryKind(o)!=="missing"}function gp(e,t,n,r){try{return $r(e,t,n,r)}catch(o){if(o instanceof D)throw o;return""}}var mw=new Set(["node_modules","__pycache__"]),fw=[["vendor","bundle"],["vendor","cache"]];function pw(e,t,n,r,o){if(uw(e))return null;let i=lt(e,t,r,o);if(!i)return null;let s=U(i.split("/").pop()??""),a=U(i),l=()=>dw(s)||fl(e,t,r,o);if(lw.has(s)||cw.some((d)=>s.startsWith(d)))return null;let c=U(Sw(e,t,r,o));for(let d of Es){let f=`~/${d.suffixParts.join("/")}`;if((rp(a,f)||rp(c,f))&&_t(d.id,n))return d.id}let u=gw(i,t,n,r,o);if(u)return u;if(sw.has(s))return null;for(let d of vs)if(s===d.basename&&_t(d.id,n))return d.id;if(s.startsWith(aw)&&_t(fo.id,n)&&l())return fo.id;for(let d of xs)if(s.length>d.prefix.length&&s.startsWith(d.prefix)){let f=s.slice(d.prefix.length)[0];if((f==="-"||f==="_")&&_t(d.id,n)&&l())return d.id}for(let d of Rs)if(s.length>d.prefix.length&&s.startsWith(d.prefix)){if(s.slice(d.prefix.length)===d.suffix&&_t(d.id,n))return d.id}if(Cw(a))return null;if(!s.includes(".")&&rr.pattern.test(s)&&_t(rr.id,n))return rr.id;let m=bw(s,n);if(m)return m;return null}function gw(e,t,n,r,o){return po.find((i)=>{if(!_t(i.id,n))return!1;switch(i.id){case"secret.cli.claude-code":return H(e,V(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),[".credentials.json"]);case"secret.cli.claude-code.config":{let s=U(e).split("/");return H(e,V(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),["settings.json","settings.local.json"])||Ur(e,"~/.claude.json",t,r,o)||s.at(-1)==="settings.local.json"&&s.at(-2)===".claude"||s.at(-1)===".mcp.json"}case"secret.cli.antigravity":return H(e,lt("~/.gemini/config",t,r,o),["hooks.json","mcp_config.json"]);case"secret.cli.codex":{let s=V(r.env.get("CODEX_HOME"),"~/.codex",t,r,o);return H(e,s,["auth.json",".credentials.json"])||Br(e,s,["secrets",".sandbox-secrets"])}case"secret.cli.codex.config":{let s=V(r.env.get("CODEX_HOME"),"~/.codex",t,r,o),a=U(e).split("/").at(-1)??"";return H(e,s,["config.toml"])||a.endsWith(".config.toml")&&H(e,s,[a])}case"secret.cli.gemini":return H(e,be(V(r.env.get("GEMINI_CLI_HOME"),"~",t,r,o),".gemini"),["oauth_creds.json","mcp-oauth-tokens.json","a2a-oauth-tokens.json","gemini-credentials.json"]);case"secret.cli.gemini.config":{let s=U(e).split("/"),a=r.env.get("GEMINI_CLI_SYSTEM_SETTINGS_PATH"),l=r.env.get("ProgramData")?[be(V(r.env.get("ProgramData"),"",t,r,o),"gemini-cli")]:[];return H(e,be(V(r.env.get("GEMINI_CLI_HOME"),"~",t,r,o),".gemini"),["settings.json","google_accounts.json"])||s.at(-1)==="settings.json"&&s.at(-2)===".gemini"||(a?.trim()?Ur(e,a,t,r,o):!1)||["/Library/Application Support/GeminiCli","/etc/gemini-cli",...l].some((c)=>H(e,lt(c,t,r,o),["settings.json"]))}case"secret.cli.copilot-cli":{let s=V(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o);return H(e,s,["config.json"])||Br(e,s,["mcp-oauth-config","mcp-secrets"])}case"secret.cli.copilot-cli.config":return H(e,V(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o),["mcp-config.json"]);case"secret.cli.kimi-code":{let s=V(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),a=V(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o);return H(e,s,["server.token"])||Br(e,s,["credentials"])||Br(e,a,["credentials","mcp-oauth"])}case"secret.cli.kimi-code.config":{let s=["config.toml","mcp.json"],a=U(e).split("/");return a.at(-1)==="mcp.json"&&a.at(-2)===".kimi-code"||H(e,V(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),s)||H(e,V(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o),[...s,"config.json","config.json.bak"])}case"secret.cli.opencode":{let s=be(V(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),"opencode"),a=U(e).split("/").at(-1)??"",l=r.env.get("OPENCODE_DB")?.trim(),c=l&&l!==":memory:"?[l,`${l}-wal`,`${l}-shm`]:[];return H(e,s,["auth.json","mcp-auth.json"])||/^opencode(-.+)?\.db(-wal|-shm)?$/.test(a)&&H(e,s,[a])||c.some((u)=>Ur(e,u,t,r,o))}case"secret.cli.opencode.config":{let s=r.env.get("OPENCODE_CONFIG_DIR")?V(r.env.get("OPENCODE_CONFIG_DIR"),"~/.config/opencode",t,r,o):be(V(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"opencode"),a=r.env.get("ProgramData")?[be(V(r.env.get("ProgramData"),"",t,r,o),"opencode")]:[],l=["opencode.json","opencode.jsonc"],c=r.env.get("OPENCODE_CONFIG");return l.includes(U(e).split("/").at(-1)??"")||H(e,s,l)||(c?.trim()?Ur(e,c,t,r,o):!1)||["/Library/Application Support/opencode","/etc/opencode",...a].some((u)=>H(e,lt(u,t,r,o),l))}case"secret.cli.pi":return H(e,V(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["auth.json"]);case"secret.cli.pi.config":return H(e,V(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["models.json"]);case"secret.cli.amp":{let s=lt("~",t,r,o);return[be(V(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),"amp"),be(s,".local","share","amp")].some((l)=>H(e,l,["secrets.json"]))||Br(e,be(s,".amp"),["oauth"])}case"secret.cli.amp.config":{let s=["settings.json","settings.jsonc"],a=[be(V(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"amp"),be(lt("~",t,r,o),".config","amp")],l=U(e).split("/"),c=r.env.get("AMP_SETTINGS_FILE");return a.some((u)=>H(e,u,s))||l.at(-2)===".amp"&&s.includes(l.at(-1)??"")||(c?.trim()?Ur(e,c,t,r,o):!1)}case"secret.cli.cursor":{let s=be(V(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"cursor"),a=be(V(r.env.get("CURSOR_DATA_DIR"),"~/.cursor",t,r,o),"projects");return H(e,lt("~/.cursor",t,r,o),["auth.json"])||H(e,s,["auth.json"])||U(e).split("/").at(-1)==="mcp-auth.json"&&cn(U(e),U(a))}case"secret.cli.cursor.config":{let s=U(e).split("/");return s.at(-1)==="mcp.json"&&s.at(-2)===".cursor"}case"secret.cli.grok-build":return H(e,V(r.env.get("GROK_HOME"),"~/.grok",t,r,o),["auth.json","mcp_credentials.json"]);case"secret.cli.grok-build.config":{let s=U(e).split("/");return s.at(-1)==="config.toml"&&s.at(-2)===".grok"||H(e,V(r.env.get("GROK_HOME"),"~/.grok",t,r,o),["config.toml","managed_config.toml","requirements.toml"])||H(e,lt("/etc/grok",t,r,o),["managed_config.toml","requirements.toml"])}default:return!1}})?.id??null}var np=new WeakMap;function V(e,t,n,r,o){let i=np.get(o)??new Map;np.set(o,i);let s=`${n}\x00${e??""}\x00${t}`,a=i.get(s);if(a!==void 0)return a;let l=lt(e?.trim()?e:t,n,r,o);return i.set(s,l),l}function H(e,t,n){return n.some((r)=>hp(e,be(t,r)))}function Br(e,t,n){return n.some((r)=>cn(U(e),U(be(t,r))))}function Ur(e,t,n,r,o){return hp(e,lt(t,n,r,o))}function hp(e,t){return U(e)===U(t)}function be(e,...t){return rt([e,...t].filter(Boolean).join("/"))}function hw(e,t,n,r,o,i){if(n.length===0)return!1;let s=U($r(e,t,o,i));return n.some((a)=>cn(s,U($r(a,r,o,i))))}function yw(e,t,n,r,o,i){if(n.length===0)return!1;let s=U($r(e,t,o,i));if(!s)return!1;let a=o.env.get("HOME")??o.home,l=a?rt(N(Oe(a),o.paths,i)):"",c=U(l),u=o.env.get("CC_SAFETY_NET_HOME"),m=U(u?rt(N(xe.resolve(Oe(u)),o.paths,i)):l&&rt(N(`${l}/.cc-safety-net`,o.paths,i)));if(m&&cn(s,m))return!1;return n.some((d)=>{let f=Ps(d);if(f&&xe.posix.basename(s)!==U(f.name))return!1;let p=U($r(f?.root??d,r,o,i));if(!p)return!1;if(c&&(c===p||c.startsWith(p.endsWith("/")?p:`${p}/`)))return!1;return cn(s,p)&&!(f&&s===p)})}function Cw(e){let t=e.split("/");return t.some((n)=>mw.has(n))||fw.some(([n,r])=>t.some((o,i)=>o===n&&t[i+1]===r))}function bw(e,t){let n=e.lastIndexOf("."),r=n>0&&n<e.length-1?e.slice(n+1):"";if(r==="")return null;for(let o of _s)if(r===o.extension&&_t(o.id,t))return o.id;for(let o of ws)if(o.pattern.test(r)&&_t(o.id,t))return o.id;return null}function U(e){return e.toLowerCase()}function _t(e,t){return!t?.disabledRules?.includes(e)}function lt(e,t,n,r){let{home:o,normalized:i}=bl(e,n,r);if(!i)return"";if(!o)return i;let s=Sl(i,o),a=xe.isAbsolute(s)?s:rt(xe.resolve(t,s)),l=rt(N(a,n.paths,r));if(!cn(l,o)){if(xe.isAbsolute(s))return l;return l===a?i:l}let c=l.slice(o.length);return c?`~${c}`:"~"}function rp(e,t){return e===t||e.startsWith(`${t}/`)}function Sw(e,t,n,r){let{home:o,normalized:i}=bl(e,n,r);if(!i||!o)return"";let s=Sl(i,o),a=xe.posix.normalize(xe.isAbsolute(s)?s:rt(xe.resolve(t,s))),l=rt(Oe(n.env.get("HOME")??n.home)),c=(d)=>process.platform==="win32"?d.toLowerCase():d,u=[o,l].find((d)=>d!==""&&cn(c(a),c(d)));if(u===void 0)return"";let m=a.slice(u.length);return m?`~${m}`:"~"}function $r(e,t,n,r){let{home:o,normalized:i}=bl(e,n,r);if(!i)return"";let s=o?Sl(i,o):i;return rt(N(xe.isAbsolute(s)?s:xe.resolve(t,s),n.paths,r))}function bl(e,t,n){let r=t.env.get("HOME")??t.home,o=r?rt(N(Oe(r),t.paths,n)):"",i=rt(Oe(vw(Ct(e,t))));return{home:o,normalized:i}}function vw(e){if(!e.trim().toLowerCase().startsWith("file:"))return e;try{return op.fileURLToPath(e)}catch{return e}}function Sl(e,t){if(e==="~")return t;if(e.startsWith("~/"))return be(t,e.slice(2));return e}function Ew(e){if(process.platform==="win32")return!0;return xe.win32.parse(e).root.length>1}function rt(e){let t=e.trim(),n=(t.includes("\\")&&Ew(t)?t.replace(/\\/g,"/"):t).replace(/\/{2,}/g,"/").replace(/^\.\//,"");if(n==="/")return n;return n.replace(/\/+$/g,"")}function cn(e,t){return e===t||e.startsWith(t.endsWith("/")?t:`${t}/`)}function ot(e){return e.split(/[\\/]/).pop()?.replace(/\.exe$/i,"")??e}class un extends Error{stage;evaluation;name="GuardEvaluationError";constructor(e,t,n){super(`CC Safety Net ${e} dependency failed`,{cause:n});this.stage=e;this.evaluation=t}}var xw={findPolicyMutation:jf,findGitMetadataMutation:_d,resolveGitMetadata:Rw,loadPolicySnapshot:hu,findSensitiveTarget:cp,analyzeCommand:Lf,getModes:rs};function yp(e,t){let n={...xw,...t.dependencies},r=Aw(e),o=jr(e)?e.command:r,i=Bt("policy-protection",o,()=>Rr(e)),s=Pe(i,"input-candidate"),a=Pe(i,"declared-command");if(jr(e)&&e.command?.trim()&&a?.program.status==="limited")return{stage:"command-analysis",decision:{kind:"deny",reason:it,intent:"stop_and_explain",evidence:{command:e.command,segment:e.command}}};if(s?.program.status==="limited")return{stage:"command-validation",decision:{kind:"deny",reason:zd,intent:"stop_and_explain"}};let l=de(),c=Bt("policy-protection",o,()=>n.resolveGitMetadata([e.context.executionCwd,e.context.configCwd],t.environment)),u=Bt("policy-protection",o,()=>n.findPolicyMutation(i,t.environment,l));if(u){let E=o??u.target;return{stage:"policy-protection",decision:{kind:"deny",reason:$f,intent:"hard_stop",evidence:{command:E,segment:u.target}}}}let m=Bt("policy-protection",o,()=>zf(i,t.environment,l));if(m){let E=o??m.target;return{stage:"policy-protection",decision:{kind:"deny",reason:Ff,intent:"hard_stop",evidence:{command:E,segment:m.target}}}}let d=Bt("policy-protection",o,()=>n.findGitMetadataMutation(i,c,t.environment,l));if(d){let E=o??d.target;return{stage:"policy-protection",decision:{kind:"deny",reason:$e,intent:"hard_stop",evidence:{command:E,segment:d.target}}}}let f=Bt("config-load",o,()=>n.loadPolicySnapshot(t.environment,{...t.policyOptions,cwd:e.context.configCwd})),p=f.policy,g=n.getModes(p,t.environment.env),h={level:g.effectiveLevel,..._w(f)},y=p.secretProtection.enabled===!1?null:Bt("secret-protection",o,()=>n.findSensitiveTarget(i,p.secretProtection,t.environment,l,{strict:jr(e)||s?.program.dialect==="powershell"?g.strict:void 0}));if(y){let E=o??y.target;return{stage:"secret-protection",...h,decision:{kind:"deny",reason:ip,intent:"hard_stop",ruleId:y.ruleId,evidence:{command:E,segment:y.target}}}}if(!jr(e))return{stage:"non-command",...h,decision:{kind:"allow"}};if(!e.command||e.command.trim()==="")return{...vl("command-validation",o),...h};let b=Bt("command-analysis",o,()=>Wf(()=>n.analyzeCommand(e.command,{cwd:e.context.executionCwd,shell:e.route.shell,policySnapshot:f,environment:t.environment,protectedGitMetadata:c,effectiveCapabilities:g.capabilities,strict:g.strict,paranoidRm:g.paranoidRm,paranoidInterpreters:g.paranoidInterpreters,worktreeMode:g.worktreeMode,budget:l,...t.trace?{trace:t.trace}:{}},ww(i),i.store),e.command,t.trace));if(b.decision){let E=!g.strict&&b.decision.kind==="deny"&&(b.decision.ruleId==="raw-text.dangerous-command"||b.decision.reason===Pr&&!/^(?:\S*\/)?(?:ba|da|z|k)?sh(?:\s+-[A-Za-z-]*)*$/.test(b.decision.evidence?.segment??"")&&Be(e.command)===null);return{stage:"command-analysis",...h,..."errorCode"in b?{errorCode:b.errorCode}:{},decision:E?{...b.decision,ask:!0}:b.decision}}return{stage:"command-analysis",...h,decision:{kind:"allow"}}}function Rw(e,t){let n=[...new Set(e.filter((r)=>typeof r==="string"&&r!==""))].flatMap((r)=>t.gitMetadata(r)??[]);if(n.length===0)return null;return Object.freeze({entries:Object.freeze([...new Set(n.flatMap((r)=>r.entries))]),markerFiles:Object.freeze([...new Set(n.flatMap((r)=>r.markerFiles))]),directories:Object.freeze([...new Set(n.flatMap((r)=>r.directories))]),hooksDirectories:Object.freeze([...new Set(n.flatMap((r)=>r.hooksDirectories))])})}function _w(e){if(e.state==="ready")return{};return{configFallback:{reason:e.reason}}}function ww(e){return Pe(e,"declared-command")?.program}function Aw(e){try{return Pt(e.input)}catch(t){let n=jr(e)?e.command:void 0;throw new un("policy-protection",vl("policy-protection",t instanceof ve?void 0:n,t),t)}}function Bt(e,t,n){try{return n()}catch(r){throw new un(e,vl(e,r instanceof ve?void 0:t,r),r)}}function vl(e,t,n){let r=n instanceof D||n instanceof Qe;return{stage:e,decision:{kind:"deny",reason:r?Bi:qn,intent:"stop_and_explain",...t?{evidence:{command:t,segment:t}}:{}}}}function jr(e){return e.route.kind==="command"}var Ni=require("node:fs"),$n=require("node:path");var le=require("node:fs"),Un=require("node:path");function Cp(e,t={}){return xo(Cn(e,t),e.home).policy.audit.retention_days}var xl=86400000,Pw=".last-prune",Tw=/^\d{4}-\d{2}$/,Iw=/^((\d{4}-\d{2})-\d{2})-.+\.jsonl$/,bp=(e)=>Math.floor(e/xl);function vp(e,t,n=()=>new Date){try{let r=n().getTime();if(!le.statSync(t,{throwIfNoEntry:!1})?.isDirectory())return;let o=Un.join(t,Pw),i=le.statSync(o,{throwIfNoEntry:!1})?.mtimeMs;if(i!==void 0&&bp(i)===bp(r))return;let s=r-Cp(e)*xl,a=new Date(r).toISOString().slice(0,7);for(let l of El(t)){if(l.isDirectory()){kw(Un.join(t,l.name),s,a);continue}if(l.isFile()&&l.name.endsWith(".jsonl"))Ow(Un.join(t,l.name),s)}le.writeFileSync(o,"",{mode:384}),le.utimesSync(o,r/1000,r/1000)}catch{}}function kw(e,t,n){for(let r of El(e)){if(!r.isDirectory()||!Tw.test(r.name))continue;let o=Un.join(e,r.name);for(let i of El(o)){if(!i.isFile())continue;let s=Iw.exec(i.name);if(!s||s[2]!==r.name)continue;let a=Date.parse(`${s[1]}T00:00:00.000Z`)+xl;if(!Number.isFinite(a)||a>=t)continue;Ep(Un.join(o,i.name))}if(r.name!==n)Sp(o)}Sp(e)}function Ow(e,t){try{let n=le.lstatSync(e);if(n.mtimeMs>=t)return;let r=le.readFileSync(e,"utf-8").split(`
46
- `).filter((o)=>o.trim()).map(Mw);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(le.lstatSync(e).mtimeMs!==n.mtimeMs)return;Ep(e)}catch{}}function Mw(e){try{let t=JSON.parse(e).ts,n=typeof t==="string"?Date.parse(t):Number.NaN;return Number.isFinite(n)?n:void 0}catch{return}}function El(e){try{return le.readdirSync(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Ep(e){try{le.unlinkSync(e)}catch{}}function Sp(e){try{le.rmdirSync(e)}catch{}}var Dw="2.4.8",Nw=1e4,Lw=2000,Ww=256,Gw=32768;function Fw(e){let t=e.trim();if(!t)return null;let n=t.replace(/[^A-Za-z0-9_.-]+/g,"_");if(n=n.replace(/^[._-]+|[._-]+$/g,"").slice(0,128),!n||n==="."||n==="..")return null;return n}function zw(e){return(e??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function Rl(e,t,n,r,o,i,s={}){let a=Fw(t);if(!a)return;let l=Bw(e);if(!l)return;try{let c=(s.now??(()=>new Date))().toISOString(),u=Di(mt(n),s.failureStage?Number.POSITIVE_INFINITY:Nw),m=Di(mt(r),Lw),d=s.toolName?Di(mt(s.toolName),Ww):void 0,f=i===null?void 0:Di(mt(i),Gw),p=$n.join(l,zw(f?.value??null),c.slice(0,7));Ni.mkdirSync(p,{recursive:!0,mode:448});let g=$n.join(p,`${c.slice(0,10)}-${a}.jsonl`),h={ts:c,id:(s.createId??is)(),v:Dw,sessionId:a,decision:s.decision??"deny",agent:s.agent,shape:s.shape,level:s.level,configFallback:s.configFallback,toolName:d?.value,command:u.value,segment:m.value,...u.truncated||m.truncated||d?.truncated||f?.truncated?{truncated:!0}:{},reason:o,ruleId:s.ruleId,intent:s.intent,failureStage:s.failureStage,errorCode:s.errorCode,cwd:f?.value??null};Ni.appendFileSync(g,`${JSON.stringify(h)}
46
+ `).filter((o)=>o.trim()).map(Mw);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(le.lstatSync(e).mtimeMs!==n.mtimeMs)return;Ep(e)}catch{}}function Mw(e){try{let t=JSON.parse(e).ts,n=typeof t==="string"?Date.parse(t):Number.NaN;return Number.isFinite(n)?n:void 0}catch{return}}function El(e){try{return le.readdirSync(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Ep(e){try{le.unlinkSync(e)}catch{}}function Sp(e){try{le.rmdirSync(e)}catch{}}var Dw="2.4.10",Nw=1e4,Lw=2000,Ww=256,Gw=32768;function Fw(e){let t=e.trim();if(!t)return null;let n=t.replace(/[^A-Za-z0-9_.-]+/g,"_");if(n=n.replace(/^[._-]+|[._-]+$/g,"").slice(0,128),!n||n==="."||n==="..")return null;return n}function zw(e){return(e??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function Rl(e,t,n,r,o,i,s={}){let a=Fw(t);if(!a)return;let l=Bw(e);if(!l)return;try{let c=(s.now??(()=>new Date))().toISOString(),u=Di(mt(n),s.failureStage?Number.POSITIVE_INFINITY:Nw),m=Di(mt(r),Lw),d=s.toolName?Di(mt(s.toolName),Ww):void 0,f=i===null?void 0:Di(mt(i),Gw),p=$n.join(l,zw(f?.value??null),c.slice(0,7));Ni.mkdirSync(p,{recursive:!0,mode:448});let g=$n.join(p,`${c.slice(0,10)}-${a}.jsonl`),h={ts:c,id:(s.createId??is)(),v:Dw,sessionId:a,decision:s.decision??"deny",agent:s.agent,shape:s.shape,level:s.level,configFallback:s.configFallback,toolName:d?.value,command:u.value,segment:m.value,...u.truncated||m.truncated||d?.truncated||f?.truncated?{truncated:!0}:{},reason:o,ruleId:s.ruleId,intent:s.intent,failureStage:s.failureStage,errorCode:s.errorCode,cwd:f?.value??null};Ni.appendFileSync(g,`${JSON.stringify(h)}
47
47
  `,{encoding:"utf-8",mode:384}),vp(e,l,s.now)}catch{}}function Di(e,t){return{value:e.slice(0,t),truncated:e.length>t}}function Hw(e){let t=e.env.get("CC_SAFETY_NET_AUDIT_HOME");if(e.env.get("NODE_ENV")==="test"&&!t)return null;let n=t||e.home;return n&&$n.isAbsolute(n)?n:null}function Bw(e){let t=Hw(e);return t?$n.join(t,".cc-safety-net","logs"):null}function Rp(e,t,n,r=!0,o){if(t.decision.kind==="allow"){if(!n||e.route.kind!=="command")return;let a=xp(e);return{decision:"allow",command:a,segment:a,reason:"allowed",cwd:e.context.executionCwd,toolName:e.toolName,level:t.level,...t.configFallback?{configFallback:!0}:{}}}let i=t.decision.evidence,s=i?.command??(r?xp(e):"");return{decision:"deny",command:s,segment:i?.segment??s,reason:t.decision.reason,cwd:e.context.executionCwd,toolName:e.toolName,level:t.level,...t.configFallback?{configFallback:!0}:{},ruleId:t.decision.ruleId,intent:t.decision.intent,failureStage:o?.stage,errorCode:o?.errorCode}}function xp(e){return"command"in e?e.command??"":""}function _p(e,t,n,r){if(!t)return;let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;Rl(e,o,t.command,t.segment,t.reason,t.cwd,{decision:t.decision,agent:r.agent,shape:r.shape,level:t.level,configFallback:t.configFallback,toolName:t.toolName,ruleId:t.ruleId,intent:t.intent,failureStage:t.failureStage,errorCode:t.errorCode})}function wp(e,t,n,r){let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;Rl(e,o,t.command??"",t.segment??t.command??"",t.reason,r.cwd??null,{decision:"deny",agent:r.agent,shape:r.shape,toolName:r.toolName??t.toolName,ruleId:t.ruleId,intent:t.intent})}function Pp(e,t,n){try{let r=yp(t,{environment:e,...n.guard});return Ap(e,t,r,n),r}catch(r){if(!(r instanceof un))throw r;throw Ap(e,t,r.evaluation,n,!(r.cause instanceof ve),{stage:r.stage,errorCode:Uw(r.cause)}),r}}function Ap(e,t,n,r,o=!0,i){_p(e,Rp(t,n,r.guard?.auditAllowed??!1,o,i),r.audit.getSessionId,{agent:r.audit.agent,shape:r.audit.shape})}function Uw(e){if(e instanceof D)return X[e.kind].errorCode;if(e instanceof ve)return"tool-input-limit";if(e instanceof Qe)return"structural-shell-syntax-limit";return"unexpected-error"}var ut=(e,t,n,r,o)=>Ql(e.cwd,t,n,r,o.paths,process.cwd());function $w(e,t){console.log(JSON.stringify(e(Il(t))))}async function jw(e){let t;try{t=(await Jl(process.stdin)).trim()}catch{e({reason:"Failed to parse hook input JSON."});return}if(!t){e({reason:"Missing hook input JSON."});return}return Qr(t,e,"Failed to parse hook input JSON.")}async function Vw(e){let t=cc(),n=await jw(e.outputDeny);if(n===void 0)return;if(!n||typeof n!=="object"||Array.isArray(n)){ee(e.outputDeny);return}if(!e.isSupported(n))return;let r=e.getAgent?.(n,t)??e.agent,o=e.agent===r?void 0:e.agent,i=Zw(n),s=(p,g)=>{wp(t,p,()=>e.getSessionId(n),{agent:r,shape:o,toolName:g,cwd:i}),e.outputDeny(p)},a=e.getToolName(n);if(typeof a!=="string"||a.trim()===""){ee((p)=>s(p),Yw(n));return}let l=a,c=(p)=>s(p,l),u;try{u=e.getToolInput(n,l,c,t)}catch(p){if(!(p instanceof ve))throw p;ee(c,void 0,l);return}if(!u.ok)return;let m=e.getContext(n,u.input,l,c,t);if(!m)return;let d;try{d=Pt(u.input)}catch(p){if(!(p instanceof ve))throw p;ee(c,void 0,l);return}let f=Jn(l,u.input,u.route,m,d??null);try{let p=Pp(t,f,{guard:{auditAllowed:uc(t.env),dependencies:e.guardDependencies},audit:{agent:r,shape:o,getSessionId:()=>e.getSessionId(n)}}),g=Ui(p,{includeEvidence:!0,toolName:p.stage==="command-analysis"?void 0:l});if(g){if(g.ask&&e.outputAsk?.(n,g))return;e.outputDeny(g);return}e.outputAllow?.()}catch(p){if(!(p instanceof un))throw p;Kw(p,t.env);let g=Ui(p.evaluation,{includeEvidence:!0,toolName:p.evaluation.stage==="command-analysis"?void 0:l});if(g)e.outputDeny(g);return}}function Kw(e,t){if(!$t(ae.debug,t))return;console.error(`CC Safety Net debug: ${qw(e.stage)}: ${Ol(e.cause)}`)}function qw(e){if(e==="policy-protection")return"hook policy protection failed";if(e==="config-load")return"hook config loading failed";if(e==="secret-protection")return"hook secret protection failed";return"hook analysis failed"}function Yw(e){if(!e||typeof e!=="object"||Array.isArray(e))return;if(Object.hasOwn(e,"tool_input"))return e.tool_input;let t=e.toolCall;if(t&&typeof t==="object"&&!Array.isArray(t))return t.args;return}function Zw(e){if(!e||typeof e!=="object"||Array.isArray(e))return null;let t=e.cwd;if(typeof t==="string")return t;let n=e.toolCall;if(!n||typeof n!=="object"||Array.isArray(n))return null;let r=n.args;if(!r||typeof r!=="object"||Array.isArray(r))return null;let o=r.Cwd;return typeof o==="string"?o:null}async function ke(e){let t=(s)=>$w(e.createDenyOutput,s),n=e.createAskOutput,r=n?(s,a)=>{let l=n(s,kl(a));if(l===null)return!1;return console.log(JSON.stringify(l)),!0}:void 0,o=e.createAllowOutput,i=o?()=>console.log(JSON.stringify(o())):void 0;try{await Vw({...e,outputDeny:t,outputAsk:r,outputAllow:i})}catch(s){console.error("CC Safety Net error:",s),t(pn())}}var Xw=new Map([["run_command","auto"]]),Jw=new Set(["absolutepath","directorypath","file_path","filepath","path","searchdirectory","searchpath","target_file","targetfile"]);function Tp(e){return se(e,Xw)}async function Ip(){await ke({agent:"antigravity-cli",createDenyOutput:(e)=>({decision:"deny",reason:e}),isSupported:()=>!0,getToolName:(e)=>e.toolCall?.name,getToolInput:(e,t)=>({ok:!0,input:rA(e.toolCall?.args,t),route:Tp(t)}),getContext:Qw,getSessionId:(e)=>e.conversationId})}function Qw(e,t,n,r,o){let s=nA(e,o.paths).flatMap((u)=>{let m=at([u],o.paths);return m?[m]:[]});if(!s[0])return dn(r,t,n),null;if(n!=="run_command"){let u;try{u=eA(t,n,s,o.paths)}catch(m){if(m instanceof ve)return dn(r,void 0,n),null;if(!(m instanceof D))throw m;return dn(r,t,n),null}if(!u)return dn(r,t,n),null;return{configCwd:u,executionCwd:u}}let a=e.toolCall?.args;if(!a||!Object.hasOwn(a,"Cwd"))return{configCwd:s[0],executionCwd:s[0]};let l=a.Cwd;if(typeof l!=="string"||l.trim()==="")return dn(r,t,n),null;let c=pt(l,s,o.paths);if(c){let u=kp(c,s);if(!u)return dn(r,t,n,l),null;return{configCwd:u,executionCwd:c}}return dn(r,t,n,l),null}function eA(e,t,n,r){let o=Tp(t),i=[...Xr(e,Jw),...o.kind==="patch"?Jr(e):[]].filter(jn.isAbsolute),s=de(),a=new Set(i.flatMap((l)=>{let c=kp(N(l,r,s),n);return c?[c]:[]}));if(a.size>1)return null;return[...a][0]??n[0]??null}function kp(e,t){return t.filter((n)=>tA(e,n)).reduce((n,r)=>r.length>n.length?r:n,"")||null}function tA(e,t){let n=jn.relative(t,e);return n===""||!n.startsWith("..")&&!jn.isAbsolute(n)}function dn(e,t,n,r){let o=t&&typeof t==="object"?t.command:void 0;e(pn({command:typeof o==="string"?o:void 0,segment:r,toolName:n}))}function nA(e,t){if(e.workspacePaths===void 0)return[process.cwd()];let n=Array.isArray(e.workspacePaths)?e.workspacePaths.filter((r)=>typeof r==="string"&&r.trim()!==""):[];return at(n,t)?n:[]}function rA(e,t){if(!e)return;if(t!=="run_command")return e;return{...e,command:typeof e.CommandLine==="string"&&e.CommandLine!==""?e.CommandLine:void 0}}var Li=[{id:"antigravity-cli",displayName:"Antigravity CLI",doctorOrder:3,runtime:{order:1,flags:["-ac","--agy-cli"],description:"Run as Antigravity CLI PreToolUse hook",legacyTopLevelFlags:[]},install:{order:2,flag:"--agy-cli",artifactKind:"hook config",probeCommand:["agy","--version"]}},{id:"claude-code",displayName:"Claude Code",doctorOrder:1,runtime:{order:2,displayName:"Coding CLI",flags:["-cc","--coding-cli"],legacyFlags:["--claude-code"],description:"Run as Coding CLI PreToolUse hook",legacyTopLevelFlags:["-cc","--claude-code"]},install:{order:3,flag:"--claude-code",artifactKind:"plugin",probeCommand:["claude","--version"]}},{id:"codex",displayName:"Codex",doctorOrder:4,runtime:{order:3,flags:["-cx","--codex"],description:"Run as a Codex PreToolUse hook",legacyTopLevelFlags:[]},install:{order:4,flag:"--codex",artifactKind:"plugin",probeCommand:["codex","--version"]}},{id:"copilot-cli",displayName:"GitHub Copilot CLI",doctorOrder:7,runtime:{order:6,flags:["-cp","--copilot-cli"],description:"Run as GitHub Copilot CLI PreToolUse hook",legacyTopLevelFlags:["-cp","--copilot-cli"]},install:{order:7,flag:"--copilot-cli",artifactKind:"plugin",probeCommand:["copilot","--binary-version"]}},{id:"gemini-cli",displayName:"Gemini CLI",doctorOrder:6,runtime:{order:5,flags:["-gc","--gemini-cli"],description:"Run as Gemini CLI BeforeTool hook",legacyTopLevelFlags:["-gc","--gemini-cli"]},install:{order:6,flag:"--gemini-cli",artifactKind:"extension",probeCommand:["gemini","--version"]}},{id:"grok-build",displayName:"Grok Build",doctorOrder:8,runtime:{order:7,flags:["-gb","--grok-build"],description:"Run as Grok Build PreToolUse hook",legacyTopLevelFlags:[]},install:{order:8,flag:"--grok-build",artifactKind:"hook config",probeCommand:["grok","--version"]}},{id:"hermes-agent",displayName:"Hermes Agent",doctorOrder:9,runtime:{order:8,flags:["-ha","--hermes-agent"],description:"Run as Hermes Agent pre_tool_call hook",legacyTopLevelFlags:[]},install:{order:9,flag:"--hermes-agent",artifactKind:"plugin",probeCommand:["hermes","--version"]}},{id:"kimi-code",displayName:"Kimi Code",doctorOrder:10,runtime:{order:9,flags:["-kc","--kimi-code"],description:"Run as Kimi Code PreToolUse hook",legacyTopLevelFlags:[]},install:{order:10,flag:"--kimi-code",artifactKind:"hook config",probeCommand:["kimi","--version"]}},{id:"openclaw",displayName:"OpenClaw",doctorOrder:11,install:{order:11,flag:"--openclaw",artifactKind:"plugin",probeCommand:["openclaw","--version"]}},{id:"opencode",displayName:"OpenCode",doctorOrder:12,install:{order:12,flag:"--opencode",artifactKind:"plugin",probeCommand:["opencode","--version"]}},{id:"pi",displayName:"Pi",doctorOrder:13,install:{order:13,flag:"--pi",artifactKind:"package",probeCommand:["pi","--version"]}},{id:"cursor",displayName:"Cursor",doctorOrder:5,runtime:{order:4,flags:["-cu","--cursor"],description:"Run as Cursor preToolUse hook",legacyTopLevelFlags:[]},install:{order:5,flag:"--cursor",artifactKind:"hook config",probeCommand:["cursor","--version"]}},{id:"amp",displayName:"Amp Code",doctorOrder:2,install:{order:1,flag:"--amp",artifactKind:"plugin",probeCommand:["amp","--version"]}}],nL=Li.slice().sort((e,t)=>e.doctorOrder-t.doctorOrder).map((e)=>e.id),Op=Li.filter((e)=>("runtime"in e)).slice().sort((e,t)=>e.runtime.order-t.runtime.order).map((e)=>({id:e.id,displayName:"displayName"in e.runtime?e.runtime.displayName:e.displayName,flags:e.runtime.flags,legacyFlags:"legacyFlags"in e.runtime?e.runtime.legacyFlags:[],description:e.runtime.description,legacyTopLevelFlags:e.runtime.legacyTopLevelFlags})),rL=Li.slice().sort((e,t)=>e.install.order-t.install.order).map((e)=>({id:e.id,...e.install})).map(({order:e,...t})=>t),oL=Object.fromEntries(Li.map((e)=>[e.id,e.displayName]));var mn=require("node:path");function Mp(e,t){if(e!==void 0&&e!==null&&typeof e!=="string")return"unknown";if(typeof e==="string"&&!mn.isAbsolute(e))return"unknown";try{let n=de(),r=typeof e==="string"&&e?N(e,t.paths,n):void 0,o=t.home,i=[["codex",t.env.get("CODEX_HOME")||mn.join(o,".codex")],["copilot-cli",t.env.get("COPILOT_HOME")||mn.join(o,".copilot")],["claude-code",t.env.get("CLAUDE_CONFIG_DIR")||mn.join(o,".claude")]],s=r?i.flatMap(([a,l])=>{if(!mn.isAbsolute(l))return[];return Ji(r,N(l,t.paths,n))?[a]:[]}):[];if(s.length===1)return s[0]??"unknown";if(s.length>1)return"unknown"}catch{return"unknown"}if(t.env.get("CLAUDECODE")==="1"||Boolean(t.env.get("CLAUDE_CODE_ENTRYPOINT")))return"claude-code";return"unknown"}var Wi="PreToolUse",Dp="BeforeTool",Np="pre_tool_call";async function Vn(e){await ke({agent:e.agent,...e.getAgent?{getAgent:e.getAgent}:{},createDenyOutput:(t)=>({hookSpecificOutput:{hookEventName:Wi,permissionDecision:"deny",permissionDecisionReason:t}}),...e.canAsk?{createAskOutput:(t,n)=>e.canAsk?.(t)?{hookSpecificOutput:{hookEventName:Wi,permissionDecision:"ask",permissionDecisionReason:n}}:null}:{},isSupported:(t)=>t.hook_event_name===Wi,getToolName:(t)=>t.tool_name,getToolInput:(t,n)=>({ok:!0,input:t.tool_input,route:e.getToolRoute(n)}),getContext:e.getContext??ut,getSessionId:(t)=>t.session_id})}var oA=new Map([["Bash","posix"],["PowerShell","powershell"]]);function iA(e){return se(e,oA)}async function Lp(){await Vn({agent:"claude-code",getAgent:(e,t)=>Mp(e.transcript_path,t),canAsk:(e)=>["default","acceptEdits","plan"].includes(e.permission_mode??""),getToolRoute:iA})}var sA=new Map([["Bash","auto"]]);async function Wp(){await Vn({agent:"codex",getToolRoute:(e)=>se(e,sA)})}var aA=new Map([["bash","auto"],["Bash","auto"],["powershell","powershell"],["PowerShell","powershell"]]);function lA(e){return se(e,aA)}async function Gp(){await ke({agent:"copilot-cli",createDenyOutput:(e)=>({permissionDecision:"deny",permissionDecisionReason:e}),isSupported:()=>!0,getToolName:(e)=>e.toolName,getToolInput:(e,t,n)=>{if(typeof e.toolArgs!=="string")return n({reason:"Failed to parse toolArgs JSON."}),{ok:!1};let r=Qr(e.toolArgs,n,"Failed to parse toolArgs JSON.");if(r===void 0)return{ok:!1};return{ok:!0,input:r,route:lA(t)}},getContext:ut,getSessionId:(e)=>typeof e.sessionId==="string"&&e.sessionId.trim()?e.sessionId:void 0})}var cA=new Map([["Shell","auto"]]);function uA(e){return se(e,cA)}async function Fp(){await ke({agent:"cursor",createDenyOutput:(e)=>({permission:"deny",user_message:e,agent_message:e}),createAllowOutput:()=>({permission:"allow"}),isSupported:()=>!0,getToolName:(e)=>e.tool_name,getToolInput:(e,t)=>({ok:!0,input:e.tool_input,route:uA(t)}),getContext:dA,getSessionId:(e)=>e.conversation_id})}function dA(e,t,n,r,o){let i=mA(e,o.paths);if(!i[0])return ee(r,t,n),null;let s=pt(pA(e.cwd),i,o.paths);if(!s)return ee(r,t,n,typeof e.cwd==="string"?e.cwd:void 0),null;if(t===null||typeof t!=="object"||Array.isArray(t))return{configCwd:s,executionCwd:s};if(!Object.hasOwn(t,"working_directory"))return{configCwd:s,executionCwd:s};let a=t.working_directory;if(typeof a!=="string"||a.trim()==="")return ee(r,t,n),null;let l=pt(a,i,o.paths);if(!l)return ee(r,t,n,a),null;return{configCwd:s,executionCwd:l}}function mA(e,t){return fA(e).flatMap((n)=>{let r=at([n],t);return r?[r]:[]})}function fA(e){if(e.workspace_roots===void 0)return typeof e.cwd==="string"&&e.cwd.trim()!==""?[e.cwd]:[];if(!Array.isArray(e.workspace_roots))return[];return e.workspace_roots.filter((t)=>typeof t==="string"&&t.trim()!=="")}function pA(e){return typeof e==="string"&&e.trim()!==""?e:"."}var gA=new Map([["run_shell_command","auto"]]);function hA(e){return se(e,gA)}async function zp(){await ke({agent:"gemini-cli",createDenyOutput:(e)=>({decision:"deny",reason:e,systemMessage:e}),isSupported:(e)=>e.hook_event_name===Dp,getToolName:(e)=>e.tool_name,getToolInput:(e,t)=>({ok:!0,input:e.tool_input,route:hA(t)}),getContext:ut,getSessionId:(e)=>e.session_id})}var yA=new Map([["run_terminal_command","auto"]]);function CA(e){return se(e,yA)}async function Hp(){await ke({agent:"grok-build",createDenyOutput:(e)=>({decision:"deny",reason:e}),createAllowOutput:()=>({decision:"allow"}),isSupported:()=>!0,getToolName:(e)=>e.toolName,getToolInput:(e,t,n)=>{if(e.toolInputTruncated===!0)return ee(n,e.toolInput,t),{ok:!1};return{ok:!0,input:e.toolInput,route:CA(t)}},getContext:bA,getSessionId:(e)=>e.sessionId})}function bA(e,t,n,r,o){let i=at(SA(e),o.paths);if(!i)return ee(r,t,n),null;let s=pt(vA(e.cwd),[i],o.paths);if(!s)return ee(r,t,n,typeof e.cwd==="string"?e.cwd:void 0),null;return{configCwd:s,executionCwd:s}}function SA(e){let t=e.workspaceRoot===void 0?e.cwd:e.workspaceRoot;return typeof t==="string"&&t.trim()!==""?[t]:[]}function vA(e){return typeof e==="string"&&e.trim()!==""?e:"."}var Bp=require("node:path");var EA=new Map([["terminal","posix"]]);async function Up(){await ke({agent:"hermes-agent",createDenyOutput:(e)=>({action:"block",message:e}),isSupported:(e)=>e.hook_event_name===Np,getToolName:(e)=>e.tool_name,getToolInput:(e,t)=>({ok:!0,input:e.tool_input,route:se(t,EA)}),getContext:xA,getSessionId:(e)=>e.session_id})}function xA(e,t,n,r,o){let i=ut(e,t,n,r,o);if(!i)return null;if(!t||typeof t!=="object"||Array.isArray(t))return i;if(!Object.hasOwn(t,"workdir"))return i;let s=t.workdir;if(typeof s!=="string"||s.trim()==="")return ee(r,t,n),null;let a=at([Bp.resolve(i.configCwd,s)],o.paths);if(!a)return ee(r,t,n,s),null;return{...i,executionCwd:a}}var $p=new Map([["Bash","posix"]]);function RA(e){return se(e,$p)}async function jp(){await Vn({agent:"kimi-code",getToolRoute:RA,getContext:(e,t,n,r,o)=>{let i=ut(e,t,n,r,o);if(!i)return null;let s=e.tool_input;if(!$p.has(n)||!s||!Object.hasOwn(s,"cwd"))return i;let a=s.cwd;if(typeof a!=="string"||a.trim()==="")return ee(r,t,n),null;let l=pt(a,[i.configCwd],o.paths);if(!l)return ee(r,t,n,a),null;return{configCwd:i.configCwd,executionCwd:l}}})}var _A={"antigravity-cli":Ip,"claude-code":Lp,codex:Wp,"copilot-cli":Gp,cursor:Fp,"gemini-cli":zp,"grok-build":Hp,"hermes-agent":Up,"kimi-code":jp},_l=Op.map((e)=>({...e,run:_A[e.id]}));function Vp(e){let t=Kr({label:"hook",booleans:Object.fromEntries(_l.map((r)=>[r.id,[...r.flags,...r.legacyFlags]]))},e);if(t.errors.length>0)return;let n=_l.filter((r)=>t.flags[r.id]);return n.length===1?n[0]:void 0}function Kp(e){return _l.find((t)=>t.legacyTopLevelFlags.some((n)=>n===e))}async function wA(){let e=process.argv.slice(2),t=e[0],n=Kr({label:"cc-safety-net",booleans:{version:["-V","--version"]},positionals:"list"},e);if(!n.help&&!n.flags.version){if(t?.toLowerCase()==="hook"){let i=Vp(e.slice(1));if(i){await i.run();return}}let o=Kp(t);if(o){await o.run();return}}let r=await import("../cli.js");await r.runCli(e)}wA().catch((e)=>{console.error("CC Safety Net error:",e),process.exit(1)});
@@ -1,4 +1,4 @@
1
1
  import{a,s,z,f,Re,u,Ie,y,p,W}from"./index-fvtsm6ez.js";import{appendFileSync as re,mkdirSync as oe}from"node:fs";import{isAbsolute as ie,join as I}from"node:path";import{lstatSync as C,readdirSync as j,readFileSync as U,rmdirSync as V,statSync as L,unlinkSync as K,utimesSync as X,writeFileSync as Y}from"node:fs";import{join as m}from"node:path";function ee(t,e={}){return Ie(u(t,e),t.home).policy.audit.retention_days}var S=86400000,Z=".last-prune",J=/^\d{4}-\d{2}$/,Q=/^((\d{4}-\d{2})-\d{2})-.+\.jsonl$/,G=(t)=>Math.floor(t/S);function B(t,e,r=()=>new Date){try{let n=r().getTime();if(!L(e,{throwIfNoEntry:!1})?.isDirectory())return;let o=m(e,Z),c=L(o,{throwIfNoEntry:!1})?.mtimeMs;if(c!==void 0&&G(c)===G(n))return;let i=n-ee(t)*S,d=new Date(n).toISOString().slice(0,7);for(let l of A(e)){if(l.isDirectory()){q(m(e,l.name),i,d);continue}if(l.isFile()&&l.name.endsWith(".jsonl"))te(m(e,l.name),i)}Y(o,"",{mode:384}),X(o,n/1000,n/1000)}catch{}}function q(t,e,r){for(let n of A(t)){if(!n.isDirectory()||!J.test(n.name))continue;let o=m(t,n.name);for(let c of A(o)){if(!c.isFile())continue;let i=Q.exec(c.name);if(!i||i[2]!==n.name)continue;let d=Date.parse(`${i[1]}T00:00:00.000Z`)+S;if(!Number.isFinite(d)||d>=e)continue;b(m(o,c.name))}if(n.name!==r)T(o)}T(t)}function te(t,e){try{let r=C(t);if(r.mtimeMs>=e)return;let n=U(t,"utf-8").split(`
2
- `).filter((o)=>o.trim()).map(ne);if(n.length===0)return;if(n.some((o)=>o===void 0||o>=e))return;if(C(t).mtimeMs!==r.mtimeMs)return;b(t)}catch{}}function ne(t){try{let e=JSON.parse(t).ts,r=typeof e==="string"?Date.parse(e):Number.NaN;return Number.isFinite(r)?r:void 0}catch{return}}function A(t){try{return j(t,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function b(t){try{K(t)}catch{}}function T(t){try{V(t)}catch{}}var ae="2.4.8",ce=1e4,de=2000,ue=256,se=32768;function le(t){let e=t.trim();if(!e)return null;let r=e.replace(/[^A-Za-z0-9_.-]+/g,"_");if(r=r.replace(/^[._-]+|[._-]+$/g,"").slice(0,128),!r||r==="."||r==="..")return null;return r}function me(t){return(t??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function _(t,e,r,n,o,c,i={}){let d=le(e);if(!d)return;let l=O(t);if(!l)return;try{let E=(i.now??(()=>new Date))().toISOString(),N=g(z(r),i.failureStage?Number.POSITIVE_INFINITY:ce),h=g(z(n),de),w=i.toolName?g(z(i.toolName),ue):void 0,v=c===null?void 0:g(z(c),se),F=I(l,me(v?.value??null),E.slice(0,7));oe(F,{recursive:!0,mode:448});let H=I(F,`${E.slice(0,10)}-${d}.jsonl`),P={ts:E,id:(i.createId??Re)(),v:ae,sessionId:d,decision:i.decision??"deny",agent:i.agent,shape:i.shape,level:i.level,configFallback:i.configFallback,toolName:w?.value,command:N.value,segment:h.value,...N.truncated||h.truncated||w?.truncated||v?.truncated?{truncated:!0}:{},reason:o,ruleId:i.ruleId,intent:i.intent,failureStage:i.failureStage,errorCode:i.errorCode,cwd:v?.value??null};re(H,`${JSON.stringify(P)}
2
+ `).filter((o)=>o.trim()).map(ne);if(n.length===0)return;if(n.some((o)=>o===void 0||o>=e))return;if(C(t).mtimeMs!==r.mtimeMs)return;b(t)}catch{}}function ne(t){try{let e=JSON.parse(t).ts,r=typeof e==="string"?Date.parse(e):Number.NaN;return Number.isFinite(r)?r:void 0}catch{return}}function A(t){try{return j(t,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function b(t){try{K(t)}catch{}}function T(t){try{V(t)}catch{}}var ae="2.4.10",ce=1e4,de=2000,ue=256,se=32768;function le(t){let e=t.trim();if(!e)return null;let r=e.replace(/[^A-Za-z0-9_.-]+/g,"_");if(r=r.replace(/^[._-]+|[._-]+$/g,"").slice(0,128),!r||r==="."||r==="..")return null;return r}function me(t){return(t??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function _(t,e,r,n,o,c,i={}){let d=le(e);if(!d)return;let l=O(t);if(!l)return;try{let E=(i.now??(()=>new Date))().toISOString(),N=g(z(r),i.failureStage?Number.POSITIVE_INFINITY:ce),h=g(z(n),de),w=i.toolName?g(z(i.toolName),ue):void 0,v=c===null?void 0:g(z(c),se),F=I(l,me(v?.value??null),E.slice(0,7));oe(F,{recursive:!0,mode:448});let H=I(F,`${E.slice(0,10)}-${d}.jsonl`),P={ts:E,id:(i.createId??Re)(),v:ae,sessionId:d,decision:i.decision??"deny",agent:i.agent,shape:i.shape,level:i.level,configFallback:i.configFallback,toolName:w?.value,command:N.value,segment:h.value,...N.truncated||h.truncated||w?.truncated||v?.truncated?{truncated:!0}:{},reason:o,ruleId:i.ruleId,intent:i.intent,failureStage:i.failureStage,errorCode:i.errorCode,cwd:v?.value??null};re(H,`${JSON.stringify(P)}
3
3
  `,{encoding:"utf-8",mode:384}),B(t,l,i.now)}catch{}}function g(t,e){return{value:t.slice(0,e),truncated:t.length>e}}function je(t){let e=t.env.get("CC_SAFETY_NET_AUDIT_HOME");if(t.env.get("NODE_ENV")==="test"&&!e)return null;let r=e||t.home;return r&&ie(r)?r:null}function O(t){let e=je(t);return e?I(e,".cc-safety-net","logs"):null}function x(t,e,r,n=!0,o){if(e.decision.kind==="allow"){if(!r||t.route.kind!=="command")return;let d=k(t);return{decision:"allow",command:d,segment:d,reason:"allowed",cwd:t.context.executionCwd,toolName:t.toolName,level:e.level,...e.configFallback?{configFallback:!0}:{}}}let c=e.decision.evidence,i=c?.command??(n?k(t):"");return{decision:"deny",command:i,segment:c?.segment??i,reason:e.decision.reason,cwd:t.context.executionCwd,toolName:t.toolName,level:e.level,...e.configFallback?{configFallback:!0}:{},ruleId:e.decision.ruleId,intent:e.decision.intent,failureStage:o?.stage,errorCode:o?.errorCode}}function k(t){return"command"in t?t.command??"":""}function M(t,e,r,n){if(!e)return;let o;try{o=r()}catch{return}if(typeof o!=="string"||!o.trim())return;_(t,o,e.command,e.segment,e.reason,e.cwd,{decision:e.decision,agent:n.agent,shape:n.shape,level:e.level,configFallback:e.configFallback,toolName:e.toolName,ruleId:e.ruleId,intent:e.intent,failureStage:e.failureStage,errorCode:e.errorCode})}function he(t,e,r,n){let o;try{o=r()}catch{return}if(typeof o!=="string"||!o.trim())return;_(t,o,e.command??"",e.segment??e.command??"",e.reason,n.cwd??null,{decision:"deny",agent:n.agent,shape:n.shape,toolName:n.toolName??e.toolName,ruleId:e.ruleId,intent:e.intent})}function D(t,e,r){try{let n=W(e,{environment:t,...r.guard});return R(t,e,n,r),n}catch(n){if(!(n instanceof p))throw n;throw R(t,e,n.evaluation,r,!(n.cause instanceof f),{stage:n.stage,errorCode:fe(n.cause)}),n}}function R(t,e,r,n,o=!0,c){M(t,x(e,r,n.guard?.auditAllowed??!1,o,c),n.audit.getSessionId,{agent:n.audit.agent,shape:n.audit.shape})}function fe(t){if(t instanceof s)return a[t.kind].errorCode;if(t instanceof f)return"tool-input-limit";if(t instanceof y)return"structural-shell-syntax-limit";return"unexpected-error"}
4
4
  export{ee,B,je,O,he,D};