cc-safety-net 2.6.15 → 2.6.16

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.
@@ -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.6.15
2
+ // version: 2.6.16
3
3
  // @bun
4
4
  var Zi="CC Safety Net could not analyze the command because it exceeds safe analysis limits. Simplify or split the command and retry.",Je="Command exceeds maximum recursion depth and cannot be safely analyzed. Flatten the nesting and retry.",Jn="CC Safety Net failed closed because command analysis failed unexpectedly. This is not caused by your command. Report it to the user.";var Yi={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."},Xn={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,...Yi},processedCandidateBytes:{cap:4194304,...Yi},pathEnvironmentExpansion:{cap:64,...Yi},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,...Xn},trackedHeredocFiles:{cap:64,...Xn},controlFlowStates:{cap:64,...Xn},wrapperPeelIterations:{cap:20,...Xn},derivedCommandShape:Xn});class F extends Error{kind;name="AnalysisLimit";constructor(e){super(V[e].reason);this.kind=e}}function Te(){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 F(t)}}}var Ug=[/\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 yt(e){return Hg(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 Hg(e){return Ug.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 jg={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 Vg(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.cwd?`Working directory: ${r(n(e.cwd))}`:void 0,e.configWarning?`Config warning: ${n(e.configWarning)}`:void 0,e.askUser?"Approve only if you expected this command.":jg[e.intent??"manual_only"]].filter((o)=>o!==void 0).join(`
5
5
 
@@ -49,5 +49,5 @@ var Zi="CC Safety Net could not analyze the command because it exceeds safe anal
49
49
  `:""}${e.slice(o,t.tokenStart)}`,s=IT.exec(i)?.[1],a=e[n[t.tokenStart]??-1];if(s===void 0||a==="("||a==="[")return!1;let l=dn(e,t.tokenEnd)+1;if(!/^\s*(?:[;\n]|$)/.test(e.slice(t.tokenEnd,l)))return!1;let c=t.tokenStart-i.length+i.lastIndexOf(s);return(r.get(s)??[]).every((d)=>d===c)}var AT=/(?:^|[^\w$.])(?:print|console\s*\.\s*log)\s*$/,PT=new Map([["print",/^\s*\(/],["console",/^\s*\.\s*[\w$]+\s*\(/]]),TT=/(?:^|[^\w$])(?:as|class|const|def|function|import|let|var)\s+(?:print|console)(?![\w$])/,IT=/[;\n{]\s*(?:(?:const|let|var)\s+)?([A-Za-z_$][\w$]*)\s*=\s*$/,kT=/(?:^|[^\w$.])(?:pathlib\s*\.\s*)?Path\s*$/,OT=/^\s*\.\s*write_(?:text|bytes)\s*\(/,DT=/(?:^|[^\w$.])open\s*$/,MT=/^[bt]*[awx][abtwx]*$/,NT=/(?:^|[^\w$])(?:writeFile|writeFileSync|appendFile|appendFileSync|Bun\s*\.\s*write)\s*$/;function LT(e,t,n){let r=n[t.tokenStart]??-1;if(e.masked[r]!=="(")return!1;let o=Yn(e.masked,t.tokenStart),i=dn(e.masked,t.tokenEnd),s=e.masked[i],a=e.masked.slice(Math.max(0,r-40),r);if(kT.test(a))return(o===r||e.masked[o]===",")&&(s===","||s===")")&&!e.literals.some((c)=>c.tokenStart>r&&c.tokenStart<t.tokenStart)&&OT.test(e.masked.slice(Ho(e.masked,r+1)+1));if(o!==r||s!==",")return!1;if(NT.test(a))return!0;if(!DT.test(a))return!1;let l=e.literals.find((c)=>/^,\s*(?:mode\s*=\s*)?$/.test(e.masked.slice(i,c.tokenStart)));return l!==void 0&&MT.test(l.text)&&/^[,)]/.test(e.masked.slice(dn(e.masked,l.tokenEnd)))}function WT(e,t){let n=Yn(e,t),r=/[\w$]*$/.exec(e.slice(Math.max(0,n-63),n+1))?.[0]??"",o=e[Yn(e,n+1-r.length)];return o==="{"||o===","}function FT(e,t){let n=Yn(e,t),r=e.slice(Math.max(0,n-7),n+1);return!/[\w$)\]]$/.test(r)||yT.test(r)}function GT(e){let t=Gl(e);if(t==="python")return"python";if(t==="osascript")return"opaque";return t==="node"||t==="bun"||t==="deno"?"javascript":"simple"}var zT={python:"#",javascript:"/"};function $T(e,t){if(t==="opaque")return{kind:"unmaskable"};let n={masked:e.split(""),literals:[]};return Eg(e,0,t,n,!1)===null?{kind:"unmaskable"}:{kind:"masked",masked:n.masked.join(""),literals:n.literals}}function Eg(e,t,n,r,o){let i=0;for(let s=t;s<e.length;s++){let a=e[s]??"";if(o&&a==="}"&&i===0)return s;if(o&&a===zT[n])return null;if(a==="{")i++;if(a==="}")i--;if(n==="simple"&&(a==="`"||a==="%"||a==="<")){if(UP.test(e.slice(s)))return null}let l=a==="'"||a==='"'||n==="javascript"&&a==="`"?a:null;if(l===null)continue;if(l==="`"&&jT(e,s))return null;let c=n==="python"?UT(e,s):"",d=n==="python"&&e.startsWith(l.repeat(3),s)?l.repeat(3):l,f=s+d.length,m=l==="`"||/[fF]/.test(c),u=s-c.length,p=m?BT(e,u,f,d,n,r):HT(e,f,d);if(p===null)return null;if(!m){let g=e.slice(f,p);if(n==="simple"&&l==='"'&&HP.test(g))return null;r.literals.push({start:f,text:g,tokenStart:u,tokenEnd:p+d.length}),r.masked.fill(" ",f,p)}r.masked.fill(" ",s,f),r.masked.fill(" ",p,p+d.length),s=p+d.length-1}return o?null:e.length}function BT(e,t,n,r,o,i){let s=o==="python"?"{":"${",a=r==="`"||r.length===3,l="";for(let c=n;c<e.length;c++){let d=e[c]??"";if(e.startsWith(r,c))return i.literals.push({start:n,text:l,tokenStart:t,tokenEnd:c+r.length}),c;if(!a&&(d===`
50
50
  `||d==="\r"))return null;let f=o==="python"&&(d==="{"||d==="}")&&e[c+1]===d;if(!f&&e.startsWith(s,c)){let p=Eg(e,c+s.length,o,i,!0);if(p===null)return null;l+=`${s}}`,i.masked.fill(" ",c,c+s.length),i.masked[p]=" ",c=p;continue}let u=d==="\\"&&!(o==="python"&&e[c+1]==="{")||f?2:1;l+=e.slice(c,c+u),i.masked.fill(" ",c,c+u),c+=u-1}return null}function UT(e,t){return BP.exec(e.slice(Math.max(0,t-3),t))?.[1]??""}function HT(e,t,n){let r=n.length===3;for(let o=t;o<e.length;o++){let i=e[o];if(i==="\\"){o++;continue}if(!r&&(i===`
51
51
  `||i==="\r"))return null;if(e.startsWith(n,o))return o}return null}function jT(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 VT(e){for(let t of e.matchAll(/[A-Za-z_$][A-Za-z0-9_$]*/g)){let n=t[0],r=t.index;if(wP.has(n.toLowerCase()))return!0;let o=Rg(n);if(!o.some((i)=>xP.has(i)))continue;if(o.length>1)return!0;if(e[Yn(e,r)]===".")return!0;if(e[dn(e,r+n.length)]==="(")return!0}return!1}function Rg(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_$\s]+/).map((t)=>t.toLowerCase())}function Yn(e,t){for(let n=t-1;n>=0;n--)if(!/\s/.test(e[n]??""))return n;return-1}function dn(e,t){for(let n=t;n<e.length;n++)if(!/\s/.test(e[n]??""))return n;return e.length}function KT(e,t,n,r,o,i){return JT(e).flatMap((s)=>{let a=t.getShellSyntax(s);if(a.status==="invalid")return[];return[...Zn(a,t,{...n,displayOperandsAreCapturedOutput:!0},r,o,i),...qT(a,r)?YT(a,r).map((l)=>({target:l,cwd:o})):[]]})}function qT(e,t){let n=ei(e);for(let r=0;r<n.length;r++){let o=n[r];if(o?.kind!=="word"||Se(dt(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=dt(s.text,t);if(a==="--decode"||!a.startsWith("--")&&a.startsWith("-")&&/[dD]/.test(a))return!0}}return!1}function YT(e,t){return ei(e).flatMap((n)=>n.kind==="word"?[dt(n.text,t)]:n.kind==="redirection"&&n.target?[dt(n.target,t)]:[]).flatMap($l)}function $l(e){let t=XT(e);if(t===null)return[];let n=Buffer.from(t,"base64").toString("utf8");if(n===""||ZT(n))return[];return Buffer.from(n,"utf8").toString("base64").replace(/=+$/g,"")===t.replace(/=+$/g,"")?[n]:[]}function ZT(e){return Array.from(e).some((t)=>{let n=t.charCodeAt(0);return n<32||n===127})}function XT(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 JT(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(cr(o,n))continue;if(_g(e,r,n)){let i=QT(e,r+1);if(i!==null)t.push(i.body),r=i.endIndex;continue}if(!n.inSingle&&o==="`"){let i=eI(e,r);if(i!==null)t.push(i.body),r=i.endIndex}}return t}function QT(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(cr(i,n))continue;if(_g(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 eI(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 _g(e,t,n){return!n.inSingle&&e[t]==="$"&&e[t+1]==="("&&e[t+2]!=="("}function tI(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 d=/^--([^=]+)(?:=(.*))?$/.exec(c);if(d!==null){let f=d[1]??"",m=d[2];if(f===WP)o=!0;if(GP.has(f))r=!0;if(m!==void 0){if(f===Jp)t.push(m);continue}if($P.has(f)){let u=e[l+1];if(f===Jp&&u!==void 0)t.push(u);l++}continue}if(c.startsWith("-")&&c.length>1){let f=c.slice(1),m="",u="";for(let g=0;g<f.length;g++){let h=f[g]??"";if(FP.has(h))r=!0;if(zP.has(h)){m=h,u=f.slice(g+1);break}}if(m==="")continue;if(u.length>0){if(m===Xp)t.push(u);continue}let p=e[l+1];if(m===Xp&&p!==void 0)t.push(p);l++;continue}n.push(c)}let a=!r&&!o?n.slice(1):n;return[...t,...a]}function nt(e){let t=e.findIndex((n)=>!wg(n)&&!/^[A-Za-z_][A-Za-z0-9_]*=.*/.test(n));return t===-1?[]:e.slice(t)}function wg(e){return e==="env"||e==="command"||e==="builtin"||e==="sudo"}var nI=new Set(["id_rsa.pub","id_ed25519.pub","id_ecdsa.pub"]),rI=".env.",oI=new Set([".env.example",".env.sample",".env.template",".env.tpl",".env.defaults"]),iI=[".env.example.",".env.sample."];function sI(e){let t;try{t=new URL(e.trim())}catch{return!1}return t.protocol!=="file:"&&t.host!==""}function aI(e){return e.length>0&&!/\s/.test(e)}function Ui(e,t,n,r){let o=xg(e,t,n,r);return o!==""&&n.paths.entryKind(o)!=="missing"}function xg(e,t,n,r){try{return Yr(e,t,n,r)}catch(o){if(o instanceof F)throw o;return""}}var lI=/[?&][^?&=/]+=/,cI=new Set(["node_modules","__pycache__"]),dI=[["vendor","bundle"],["vendor","cache"]];function uI(e,t,n,r,o){if(sI(e))return null;let i=Re(e,t,r,o);if(!i)return null;let s=U(i.split("/").pop()??""),a=U(i),l=()=>aI(s)||Ui(e,t,r,o),c=U(yI(e,t,r,o));for(let m of Gs){let u=`~/${m.suffixParts.join("/")}`;if((ag(a,u)||ag(c,u))&&gt(m.id,n))return m.id}if(oI.has(s)||iI.some((m)=>s.startsWith(m)))return null;let d=mI(i,t,n,r,o);if(d)return d;if(nI.has(s))return null;for(let m of Fs)if(s===m.basename&&gt(m.id,n))return m.id;if(s.startsWith(rI)&&gt(Co.id,n)&&l())return Co.id;for(let m of zs)if(s.length>m.prefix.length&&s.startsWith(m.prefix)){let u=s.slice(m.prefix.length)[0];if((u==="-"||u==="_")&&gt(m.id,n)&&l())return m.id}for(let m of $s)if(s.length>m.prefix.length&&s.startsWith(m.prefix)){if(s.slice(m.prefix.length)===m.suffix&&gt(m.id,n))return m.id}if(gI(a))return null;if(!s.includes(".")&&dr.pattern.test(s)&&gt(dr.id,n))return dr.id;if(lI.test(e)&&!Ui(e,t,r,o))return null;let f=hI(s,n);if(f)return f;return null}function mI(e,t,n,r,o){return bo.find((i)=>{if(!gt(i.id,n))return!1;switch(i.id){case"secret.cli.claude-code":return G(e,H(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),[".credentials.json"]);case"secret.cli.claude-code.config":{let s=U(e).split("/");return G(e,H(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),["settings.json","settings.local.json"])||Kr(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 G(e,Re("~/.gemini/config",t,r,o),["hooks.json","mcp_config.json"]);case"secret.cli.codex":{let s=H(r.env.get("CODEX_HOME"),"~/.codex",t,r,o);return G(e,s,["auth.json",".credentials.json"])||qn(e,s,["secrets",".sandbox-secrets"])}case"secret.cli.codex.config":{let s=H(r.env.get("CODEX_HOME"),"~/.codex",t,r,o),a=U(e).split("/").at(-1)??"";return G(e,s,["config.toml"])||a.endsWith(".config.toml")&&G(e,s,[a])}case"secret.cli.gemini":return G(e,re(H(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")?[re(H(r.env.get("ProgramData"),"",t,r,o),"gemini-cli")]:[];return G(e,re(H(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()?Kr(e,a,t,r,o):!1)||["/Library/Application Support/GeminiCli","/etc/gemini-cli",...l].some((c)=>G(e,Re(c,t,r,o),["settings.json"]))}case"secret.cli.copilot-cli":{let s=H(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o);return G(e,s,["config.json"])||qn(e,s,["mcp-oauth-config","mcp-secrets"])}case"secret.cli.copilot-cli.config":return G(e,H(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o),["mcp-config.json"]);case"secret.cli.kimi-code":{let s=H(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),a=H(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o);return G(e,s,["server.token"])||qn(e,s,["credentials"])||qn(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"||G(e,H(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),s)||G(e,H(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o),[...s,"config.json","config.json.bak"])}case"secret.cli.opencode":{let s=re(H(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 G(e,s,["auth.json","mcp-auth.json"])||/^opencode(-.+)?\.db(-wal|-shm)?$/.test(a)&&G(e,s,[a])||c.some((d)=>Kr(e,d,t,r,o))}case"secret.cli.opencode.config":{let s=re(H(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"opencode"),a=r.env.get("ProgramData")?[re(H(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)??"")||G(e,s,["config.json"])||(c?.trim()?Kr(e,c,t,r,o):!1)||["/Library/Application Support/opencode","/etc/opencode",...a].some((d)=>G(e,Re(d,t,r,o),l))}case"secret.cli.pi":return G(e,H(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["auth.json"]);case"secret.cli.pi.config":return G(e,H(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["models.json"]);case"secret.cli.amp":{let s=Re("~",t,r,o);return[re(H(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),"amp"),re(s,".local","share","amp")].some((l)=>G(e,l,["secrets.json"]))||qn(e,re(s,".amp"),["oauth"])}case"secret.cli.amp.config":{let s=["settings.json","settings.jsonc"],a=[re(H(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"amp"),re(Re("~",t,r,o),".config","amp")],l=U(e).split("/"),c=r.env.get("AMP_SETTINGS_FILE");return a.some((d)=>G(e,d,s))||l.at(-2)===".amp"&&s.includes(l.at(-1)??"")||(c?.trim()?Kr(e,c,t,r,o):!1)}case"secret.cli.cursor":{let s=re(H(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"cursor"),a=re(H(r.env.get("CURSOR_DATA_DIR"),"~/.cursor",t,r,o),"projects");return G(e,Re("~/.cursor",t,r,o),["auth.json"])||G(e,s,["auth.json"])||U(e).split("/").at(-1)==="mcp-auth.json"&&un(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 G(e,H(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"||G(e,H(r.env.get("GROK_HOME"),"~/.grok",t,r,o),["config.toml","managed_config.toml","requirements.toml"])||G(e,Re("/etc/grok",t,r,o),["managed_config.toml","requirements.toml"])}case"secret.cli.droid":return G(e,Re("~/.factory",t,r,o),["auth.encrypted","auth.v2.file","auth.v2.key","auth.v2.loginkeychain"]);case"secret.cli.droid.config":{let s=U(e).split("/");return s.at(-1)==="mcp.json"&&s.at(-2)===".factory"||G(e,Re("~/.factory",t,r,o),["settings.json","hooks.json"])}case"secret.cli.devin":return[H(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),Re("~/.local/share",t,r,o)].some((s)=>G(e,re(s,"devin"),["credentials.toml"])||qn(e,re(s,"devin","mcp"),["oauth"]));case"secret.cli.devin.config":return[H(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),Re("~/.config",t,r,o)].some((s)=>G(e,re(s,"devin"),["config.json"]));default:return!1}})?.id??null}var sg=new WeakMap;function H(e,t,n,r,o){let i=sg.get(o)??new Map;sg.set(o,i);let s=`${n}\x00${e??""}\x00${t}`,a=i.get(s);if(a!==void 0)return a;let l=Re(e?.trim()?e:t,n,r,o);return i.set(s,l),l}function G(e,t,n){return n.some((r)=>Ag(e,re(t,r)))}function qn(e,t,n){return n.some((r)=>un(U(e),U(re(t,r))))}function Kr(e,t,n,r,o){return Ag(e,Re(t,n,r,o))}function Ag(e,t){return U(e)===U(t)}function re(e,...t){return Ze([e,...t].filter(Boolean).join("/"))}function fI(e,t,n,r,o,i){if(n.length===0)return!1;let s=U(Yr(e,t,o,i));return n.some((a)=>un(s,U(Yr(a,r,o,i))))}function pI(e,t,n,r,o,i){if(n.length===0)return!1;let s=U(Yr(e,t,o,i));if(!s)return!1;let a=o.env.get("HOME")??o.home,l=a?Ze(W(de(a),o.paths,i)):"",c=U(l),d=o.env.get("CC_SAFETY_NET_HOME"),f=U(d?Ze(W(Hi(de(d)),o.paths,i)):l&&Ze(W(`${l}/.cc-safety-net`,o.paths,i)));if(f&&un(s,f))return!1;return n.some((m)=>{let u=Vs(m);if(u&&lg.basename(s)!==U(u.name))return!1;let p=U(Yr(u?.root??m,r,o,i));if(!p)return!1;if(c&&(c===p||c.startsWith(p.endsWith("/")?p:`${p}/`)))return!1;return un(s,p)&&!(u&&s===p)})}function gI(e){let t=e.split("/");return t.some((n)=>cI.has(n))||dI.some(([n,r])=>t.some((o,i)=>o===n&&t[i+1]===r))}function hI(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 Bs)if(r===o.extension&&gt(o.id,t))return o.id;for(let o of Us)if(o.pattern.test(r)&&gt(o.id,t))return o.id;return null}function U(e){return e.toLowerCase()}function gt(e,t){return!t?.disabledRules?.includes(e)}function Re(e,t,n,r){let{home:o,normalized:i}=Bl(e,n,r);if(!i)return"";if(!o)return i;let s=Ul(i,o),a=zi(s)?s:Ze(Hi(t,s)),l=Ze(W(a,n.paths,r));if(!un(l,o)){if(zi(s))return l;return l===a?i:l}let c=l.slice(o.length);return c?`~${c}`:"~"}function ag(e,t){return e===t||e.startsWith(`${t}/`)}function yI(e,t,n,r){let{home:o,normalized:i}=Bl(e,n,r);if(!i||!o)return"";let s=Ul(i,o),a=lg.normalize(zi(s)?s:Ze(Hi(t,s))),l=Ze(de(n.env.get("HOME")??n.home)),c=(m)=>process.platform==="win32"?m.toLowerCase():m,d=[o,l].find((m)=>m!==""&&un(c(a),c(m)));if(d===void 0)return"";let f=a.slice(d.length);return f?`~${f}`:"~"}function Yr(e,t,n,r){let{home:o,normalized:i}=Bl(e,n,r);if(!i)return"";let s=o?Ul(i,o):i;return Ze(W(zi(s)?s:Hi(t,s),n.paths,r))}function Bl(e,t,n){let r=t.env.get("HOME")??t.home,o=r?Ze(W(de(r),t.paths,n)):"",i=Ze(de(SI(dt(e,t))));return{home:o,normalized:i}}function SI(e){if(!e.trim().toLowerCase().startsWith("file:"))return e;try{return SP(e)}catch{return e}}function Ul(e,t){if(e==="~")return t;if(e.startsWith("~/"))return re(t,e.slice(2));return e}function CI(e){if(process.platform==="win32")return!0;return yP.parse(e).root.length>1}function Ze(e){let t=e.trim(),n=(t.includes("\\")&&CI(t)?t.replace(/\\/g,"/"):t).replace(/\/{2,}/g,"/").replace(/^\.\//,"");if(n==="/")return n;return n.replace(/\/+$/g,"")}function un(e,t){return e===t||e.startsWith(t.endsWith("/")?t:`${t}/`)}function Se(e){return e.split(/[\\/]/).pop()?.replace(/\.exe$/i,"")??e}class mn 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 bI={findPolicyMutation:qp,findGitMetadataMutation:hm,resolveGitMetadata:_I,loadPolicySnapshot:qd,findSensitiveTarget:fg,analyzeCommand:Gp,getModes:ms},vI=/^(?:\S*\/)?(?:ba|da|z|k)?sh(?:\s+-[A-Za-z-]*)*$/,EI=["workdir","cwd","working_directory"];function Hl(e,t){let n={...bI,...t.dependencies},r=AI(e),o=()=>Mt("config-load",r,()=>n.loadPolicySnapshot(t.environment,{...t.policyOptions,cwd:e.context.configCwd})),i=e.route.kind==="unknown"&&r?o():void 0,s=i?.policy.commandTools.find((I)=>I.name===e.toolName),a=s&&r?RI(e,r,s.cwd,t.environment.paths):e;if("decision"in a)return a;let l=a,c=l===e?{}:{promotedInvocation:l},d=Zr(l)?l.command:r,f=Mt("policy-protection",d,()=>mm(l)),m=On(f,"input-candidate"),u=On(f,"declared-command");if(Zr(l)&&l.command?.trim()&&u?.program.status==="limited")return{stage:"command-analysis",...c,decision:{kind:"deny",reason:Je,ruleId:"analysis.recursion-limit",intent:"stop_and_explain",evidence:{command:l.command,segment:l.command}}};if(m?.program.status==="limited")return{stage:"command-validation",...c,decision:{kind:"deny",reason:um,ruleId:"analysis.structural-limit",intent:"stop_and_explain"}};let p=Te(),g=Mt("policy-protection",d,()=>n.resolveGitMetadata([l.context.executionCwd,l.context.configCwd],t.environment)),h=Mt("policy-protection",d,()=>n.findPolicyMutation(f,t.environment,p));if(h){let I=d??h.target;return{stage:"policy-protection",...c,decision:{kind:"deny",reason:Kp,ruleId:"guard.policy-config",intent:"hard_stop",evidence:{command:I,segment:h.target}}}}let y=Mt("policy-protection",d,()=>Up(f,t.environment,p));if(y){let I=d??y.target;return{stage:"policy-protection",...c,decision:{kind:"deny",reason:Bp,ruleId:"guard.policy-apply",intent:"hard_stop",evidence:{command:I,segment:y.target}}}}let b=Mt("policy-protection",d,()=>n.findGitMetadataMutation(f,g,t.environment,p));if(b){let I=d??b.target;return{stage:"policy-protection",...c,decision:{kind:"deny",reason:pe,ruleId:"guard.git-metadata",intent:"hard_stop",evidence:{command:I,segment:b.target}}}}let C=i??o(),v=C.policy,A=n.getModes(v,t.environment.env),P={level:A.effectiveLevel,...wI(C),...c},k=v.secretProtection.enabled===!1?null:Mt("secret-protection",d,()=>n.findSensitiveTarget(f,v.secretProtection,t.environment,p,{strict:Zr(l)||m?.program.dialect==="powershell"?A.strict:void 0}));if(k){let I=d??k.target;return{stage:"secret-protection",...P,decision:{kind:"deny",reason:cg,intent:"hard_stop",ruleId:k.ruleId,evidence:{command:I,segment:k.target}}}}if(!Zr(l))return{stage:"non-command",...P,decision:{kind:"allow"}};if(!l.command||l.command.trim()==="")return{...ji("command-validation",d),...P};let S=Mt("command-analysis",d,()=>zp(()=>n.analyzeCommand(l.command,{cwd:l.context.executionCwd,shell:l.route.shell,policySnapshot:C,environment:t.environment,protectedGitMetadata:g,effectiveCapabilities:A.capabilities,worktreeMode:A.worktreeMode,budget:p,...t.trace?{trace:t.trace}:{}},xI(f),f.store),l.command,t.trace)),O=l.route.shell==="auto"&&f.store.readsAutoAsPowerShell()?()=>{let I=t.trace?.branch(),J={...Hl({...l,route:{kind:"command",shell:"posix"}},{...t,...I?{trace:I.trace}:{},dependencies:{...t.dependencies,loadPolicySnapshot:()=>C,resolveGitMetadata:()=>g}}),...c};return{decision:J.decision,withItsTrace:()=>(I?.adopt(),J)}}:void 0;if(S.decision){let I=!A.strict&&(S.decision.ruleId==="raw-text.dangerous-command"||S.decision.reason===kr&&!vI.test(S.decision.evidence?.segment??"")&&De(l.command)===null),J=I?O?.():void 0;if(J?.decision.kind==="deny"&&!J.decision.unverifiedByStandardMode)return J.withItsTrace();return{stage:"command-analysis",...P,..."errorCode"in S?{errorCode:S.errorCode}:{},decision:I?{...S.decision,unverifiedByStandardMode:!0}:S.decision}}return O?.().withItsTrace()??{stage:"command-analysis",...P,decision:{kind:"allow"}}}function RI(e,t,n,r){let o=[...new Set((n?[n]:EI).flatMap((l)=>{let c=Object.getOwnPropertyDescriptor(e.input,l);return c?[c.value]:[]}))],i=o.filter((l)=>typeof l==="string"&&l.trim()!=="");if(o.length>1||i.length!==o.length)return ji("command-validation",t);let s=i[0],a=s===void 0?e.context.configCwd:no(s,e.context.configCwd,r);if(!a){let l=er({directory:"requested",problem:"unusable",cwd:s??""});return{stage:"command-validation",decision:{kind:"deny",reason:l.reason,ruleId:l.ruleId,intent:l.intent,evidence:{command:t,segment:t}}}}return or(e.toolName,e.input,{kind:"command",shell:"auto"},{configCwd:e.context.configCwd,executionCwd:a},t)}function _I(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 wI(e){if(e.state==="ready")return{};return{configFallback:{reason:e.reason}}}function xI(e){return On(e,"declared-command")?.program}function AI(e){try{return rr(e.input)}catch(t){let n=Zr(e)?e.command:void 0;throw new mn("policy-protection",ji("policy-protection",t instanceof rt?void 0:n,t),t)}}function Mt(e,t,n){try{return n()}catch(r){throw new mn(e,ji(e,r instanceof rt?void 0:t,r),r)}}function ji(e,t,n){let r=n instanceof Yt?{reason:et,ruleId:"analysis.strict-unparseable"}:n instanceof F||n instanceof Ve?{reason:Zi,ruleId:"analysis.limit"}:{reason:Jn,ruleId:"analysis.failed-closed"};return{stage:e,decision:{kind:"deny",...r,intent:"stop_and_explain",...t?{evidence:{command:t,segment:t}}:{}}}}function Zr(e){return e.route.kind==="command"}import{appendFileSync as zI,mkdirSync as $I}from"fs";import{isAbsolute as BI,join as Kl}from"path";import{lstatSync as Tg,readdirSync as PI,readFileSync as TI,rmdirSync as II,statSync as Ig,unlinkSync as kI,utimesSync as OI,writeFileSync as DI}from"fs";import{join as Xr}from"path";function Pg(e,t={}){return Po(zt(e,t),e.home).policy.audit.retention_days}var Vl=86400000,MI=".last-prune",NI=/^\d{4}-\d{2}$/,LI=/^((\d{4}-\d{2})-\d{2})-.+\.jsonl$/,kg=(e)=>Math.floor(e/Vl);function Dg(e,t,n=()=>new Date){try{let r=n().getTime();if(!Ig(t,{throwIfNoEntry:!1})?.isDirectory())return;let o=Xr(t,MI),i=Ig(o,{throwIfNoEntry:!1})?.mtimeMs;if(i!==void 0&&kg(i)===kg(r))return;let s=r-Pg(e)*Vl,a=new Date(r).toISOString().slice(0,7);for(let l of jl(t)){if(l.isDirectory()){WI(Xr(t,l.name),s,a);continue}if(l.isFile()&&l.name.endsWith(".jsonl"))FI(Xr(t,l.name),s)}DI(o,"",{mode:384}),OI(o,r/1000,r/1000)}catch{}}function WI(e,t,n){for(let r of jl(e)){if(!r.isDirectory()||!NI.test(r.name))continue;let o=Xr(e,r.name);for(let i of jl(o)){if(!i.isFile())continue;let s=LI.exec(i.name);if(!s||s[2]!==r.name)continue;let a=Date.parse(`${s[1]}T00:00:00.000Z`)+Vl;if(!Number.isFinite(a)||a>=t)continue;Mg(Xr(o,i.name))}if(r.name!==n)Og(o)}Og(e)}function FI(e,t){try{let n=Tg(e);if(n.mtimeMs>=t)return;let r=TI(e,"utf-8").split(`
52
- `).filter((o)=>o.trim()).map(GI);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(Tg(e).mtimeMs!==n.mtimeMs)return;Mg(e)}catch{}}function GI(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 jl(e){try{return PI(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Mg(e){try{kI(e)}catch{}}function Og(e){try{II(e)}catch{}}var UI="2.6.15",HI=1e4,jI=2000,VI=256,KI=32768;function qI(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 YI(e){return(e??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function ql(e,t,n,r,o,i,s={}){let a=qI(t);if(!a)return;let l=XI(e);if(!l)return;try{let c=(s.now??(()=>new Date))().toISOString(),d=Vi(yt(n),s.failureStage?Number.POSITIVE_INFINITY:HI),f=Vi(yt(r),jI),m=s.toolName?Vi(yt(s.toolName),VI):void 0,u=i===null?void 0:Vi(yt(i),KI),p=Kl(l,YI(u?.value??null),c.slice(0,7));$I(p,{recursive:!0,mode:448});let g=Kl(p,`${c.slice(0,10)}-${a}.jsonl`),h={ts:c,id:(s.createId??fs)(),v:UI,sessionId:a,decision:s.decision??"deny",agent:s.agent,shape:s.shape,level:s.level,configFallback:s.configFallback,toolName:m?.value,command:d.value,segment:f.value,...d.truncated||f.truncated||m?.truncated||u?.truncated?{truncated:!0}:{},reason:o,ruleId:s.ruleId,intent:s.intent,failureStage:s.failureStage,errorCode:s.errorCode,cwd:u?.value??null};zI(g,`${JSON.stringify(h)}
52
+ `).filter((o)=>o.trim()).map(GI);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(Tg(e).mtimeMs!==n.mtimeMs)return;Mg(e)}catch{}}function GI(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 jl(e){try{return PI(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Mg(e){try{kI(e)}catch{}}function Og(e){try{II(e)}catch{}}var UI="2.6.16",HI=1e4,jI=2000,VI=256,KI=32768;function qI(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 YI(e){return(e??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function ql(e,t,n,r,o,i,s={}){let a=qI(t);if(!a)return;let l=XI(e);if(!l)return;try{let c=(s.now??(()=>new Date))().toISOString(),d=Vi(yt(n),s.failureStage?Number.POSITIVE_INFINITY:HI),f=Vi(yt(r),jI),m=s.toolName?Vi(yt(s.toolName),VI):void 0,u=i===null?void 0:Vi(yt(i),KI),p=Kl(l,YI(u?.value??null),c.slice(0,7));$I(p,{recursive:!0,mode:448});let g=Kl(p,`${c.slice(0,10)}-${a}.jsonl`),h={ts:c,id:(s.createId??fs)(),v:UI,sessionId:a,decision:s.decision??"deny",agent:s.agent,shape:s.shape,level:s.level,configFallback:s.configFallback,toolName:m?.value,command:d.value,segment:f.value,...d.truncated||f.truncated||m?.truncated||u?.truncated?{truncated:!0}:{},reason:o,ruleId:s.ruleId,intent:s.intent,failureStage:s.failureStage,errorCode:s.errorCode,cwd:u?.value??null};zI(g,`${JSON.stringify(h)}
53
53
  `,{encoding:"utf-8",mode:384}),Dg(e,l,s.now)}catch{}}function Vi(e,t){return{value:e.slice(0,t),truncated:e.length>t}}function ZI(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&&BI(n)?n:null}function XI(e){let t=ZI(e);return t?Kl(t,".cc-safety-net","logs"):null}function Lg(e,t,n,r=!0,o){if(t.decision.kind==="allow"){if(!n||e.route.kind!=="command")return;let a=Ng(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?Ng(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 Ng(e){return"command"in e?e.command??"":""}function Wg(e,t,n,r){if(!t)return;let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;ql(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 Fg(e,t,n,r){let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;ql(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 zg(e,t,n){try{let r=Hl(t,{environment:e,...n.guard});return Gg(e,t,r,n),r}catch(r){if(!(r instanceof mn))throw r;throw Gg(e,t,r.evaluation,n,!(r.cause instanceof rt),{stage:r.stage,errorCode:JI(r.cause)}),r}}function Gg(e,t,n,r,o=!0,i){Wg(e,Lg(n.promotedInvocation??t,n,r.guard?.auditAllowed??!1,o,i),r.audit.getSessionId,{agent:r.audit.agent,shape:r.audit.shape})}function JI(e){if(e instanceof F)return V[e.kind].errorCode;if(e instanceof rt)return"tool-input-limit";if(e instanceof Ve)return"structural-shell-syntax-limit";if(e instanceof Yt)return"unparseable-command";return"unexpected-error"}function fn(e,t={}){return{malformed:!0,denial:Qn(t),cwd:e}}function Yl(e,t){return{malformed:!0,denial:er(e,t),cwd:e.cwd}}function $g(e,t={}){return(n,r)=>{try{return QI(n,r,e,t)}catch(o){return console.error("CC Safety Net error:",o),e.block(Qn())}}}function QI(e,t,n,r){let o=Lc();if(n.cancelled?.(t))return n.block(Qn());let i=n.extract(e,t,o.paths);if(!i)return n.allow;let s=()=>n.getSessionId(e,t);if("malformed"in i)return Fg(o,i.denial,s,{agent:n.agent,toolName:i.denial.toolName,cwd:i.cwd}),n.block(i.denial);let a=(l,c)=>{let d=Jl(l,{includeEvidence:c});return d?n.block(d):n.allow};try{let l=zg(o,i,{guard:{auditAllowed:zc(o.env),policyOptions:r.policyOptions,dependencies:r.guardDependencies},audit:{agent:n.agent,getSessionId:s}});return a(l,!0)}catch(l){if(!(l instanceof mn))throw l;if(it(ee.debug,o.env))console.error(`CC Safety Net debug: ${n.debugLabel} analysis failed: ${ec(l.cause)}`);return a(l.evaluation,n.includeEvidenceOnError(i))}}var ek={agent:"amp",debugLabel:"amp tool.call",extract:(e,t,n)=>nk(e,t,n),getSessionId:(e)=>ik(e),allow:{action:"allow"},block:(e)=>sk(e),includeEvidenceOnError:(e)=>e.route.kind==="command"},Bg=tk();function tk(e={}){return $g(ek,e)}function nk(e,t,n){if(!e||typeof e!=="object")return fn(null);let r=e;if(typeof r.tool!=="string"||r.tool.trim()==="")return fn(null);if(!r.input||typeof r.input!=="object")return fn(null,{toolName:r.tool});let o=rk(t);if(!o)return fn(null,{toolName:r.tool});let i=Rc(".",[o],n);if(!i)return Yl({directory:"session",problem:"unusable",cwd:o},{toolName:r.tool});let s=ok(t,e);if(!s.ok)return fn(i,{toolName:r.tool});if(!s.command)return or(r.tool,r.input,{kind:es(r.tool)},{configCwd:i,executionCwd:i},null);if(typeof s.command.command!=="string"||s.command.command.trim()==="")return fn(i,{toolName:r.tool});let a=typeof s.command.dir==="string"?s.command.dir:".",l=no(a,i,n);if(!l)return Yl({directory:"requested",problem:"unusable",cwd:a},{command:s.command.command,toolName:r.tool});return or(r.tool,r.input,{kind:"command",shell:"posix"},{configCwd:i,executionCwd:l},s.command.command)}function rk(e){let t=e.system.workspaceRoot;if(!t)return;try{let n=e.helpers.filePathFromURI(t);return typeof n==="string"&&n.trim()!==""?n:void 0}catch{return}}function ok(e,t){try{return{ok:!0,command:e.helpers.shellCommandFromToolCall(t)}}catch{return{ok:!1}}}function ik(e){if(!e||typeof e!=="object")return;let t=e.thread?.id;return typeof t==="string"&&t.trim()!==""?t:void 0}function sk(e){return{action:"reject-and-continue",message:Ql(e)}}function ak(e){e.on("tool.call",(t)=>Bg(t,e))}export{ak as default};
package/dist/api.js CHANGED
@@ -1 +1 @@
1
- import{_,c,ge,l,f,j}from"./chunks/index-qzcqzqbd.js";import{isAbsolute as n,resolve as t}from"node:path";function p(e){if(typeof e!=="object"||e===null)throw TypeError("checkCommand requires an input object with command and cwd");if(typeof e.command!=="string"||e.command.trim()==="")throw TypeError("command must be a non-empty string");if(typeof e.cwd!=="string"||e.cwd.trim()===""||!n(e.cwd))throw TypeError("cwd must be an absolute directory path");let r=t(e.cwd);if(!ge(r)){let o=_({directory:"requested",problem:"unusable",cwd:r});return{kind:"deny",reason:o.reason,ruleId:o.ruleId}}return m(a(l("library-api",{command:e.command},{kind:"command",shell:"auto"},{configCwd:r,executionCwd:r},e.command)))}function a(e){try{return j(e,{environment:c()}).decision}catch(r){if(!(r instanceof f))throw r;return r.evaluation.decision}}function m(e){if(e.kind==="allow")return{kind:"allow"};return{kind:"deny",reason:e.reason,ruleId:e.ruleId}}export{p as checkCommand};
1
+ import{P,c,he,l,f,U}from"./chunks/index-pzctbrv3.js";import{isAbsolute as n,resolve as t}from"node:path";function p(e){if(typeof e!=="object"||e===null)throw TypeError("checkCommand requires an input object with command and cwd");if(typeof e.command!=="string"||e.command.trim()==="")throw TypeError("command must be a non-empty string");if(typeof e.cwd!=="string"||e.cwd.trim()===""||!n(e.cwd))throw TypeError("cwd must be an absolute directory path");let r=t(e.cwd);if(!he(r)){let o=P({directory:"requested",problem:"unusable",cwd:r});return{kind:"deny",reason:o.reason,ruleId:o.ruleId}}return m(a(l("library-api",{command:e.command},{kind:"command",shell:"auto"},{configCwd:r,executionCwd:r},e.command)))}function a(e){try{return U(e,{environment:c()}).decision}catch(r){if(!(r instanceof f))throw r;return r.evaluation.decision}}function m(e){if(e.kind==="allow")return{kind:"allow"};return{kind:"deny",reason:e.reason,ruleId:e.ruleId}}export{p as checkCommand};
package/dist/bin/hook.js CHANGED
@@ -47,6 +47,6 @@ var Sh=["-h","--help"];function Ro(e,t){let n=Object.entries(e.booleans??{}),r=O
47
47
  `:""}${e.slice(o,t.tokenStart)}`,s=nT.exec(i)?.[1],a=e[n[t.tokenStart]??-1];if(s===void 0||a==="("||a==="[")return!1;let l=kn(e,t.tokenEnd)+1;if(!/^\s*(?:[;\n]|$)/.test(e.slice(t.tokenEnd,l)))return!1;let c=t.tokenStart-i.length+i.lastIndexOf(s);return(r.get(s)??[]).every((d)=>d===c)}var QP=/(?:^|[^\w$.])(?:print|console\s*\.\s*log)\s*$/,eT=new Map([["print",/^\s*\(/],["console",/^\s*\.\s*[\w$]+\s*\(/]]),tT=/(?:^|[^\w$])(?:as|class|const|def|function|import|let|var)\s+(?:print|console)(?![\w$])/,nT=/[;\n{]\s*(?:(?:const|let|var)\s+)?([A-Za-z_$][\w$]*)\s*=\s*$/,rT=/(?:^|[^\w$.])(?:pathlib\s*\.\s*)?Path\s*$/,oT=/^\s*\.\s*write_(?:text|bytes)\s*\(/,iT=/(?:^|[^\w$.])open\s*$/,sT=/^[bt]*[awx][abtwx]*$/,aT=/(?:^|[^\w$])(?:writeFile|writeFileSync|appendFile|appendFileSync|Bun\s*\.\s*write)\s*$/;function lT(e,t,n){let r=n[t.tokenStart]??-1;if(e.masked[r]!=="(")return!1;let o=hr(e.masked,t.tokenStart),i=kn(e.masked,t.tokenEnd),s=e.masked[i],a=e.masked.slice(Math.max(0,r-40),r);if(rT.test(a))return(o===r||e.masked[o]===",")&&(s===","||s===")")&&!e.literals.some((c)=>c.tokenStart>r&&c.tokenStart<t.tokenStart)&&oT.test(e.masked.slice(vi(e.masked,r+1)+1));if(o!==r||s!==",")return!1;if(aT.test(a))return!0;if(!iT.test(a))return!1;let l=e.literals.find((c)=>/^,\s*(?:mode\s*=\s*)?$/.test(e.masked.slice(i,c.tokenStart)));return l!==void 0&&sT.test(l.text)&&/^[,)]/.test(e.masked.slice(kn(e.masked,l.tokenEnd)))}function cT(e,t){let n=hr(e,t),r=/[\w$]*$/.exec(e.slice(Math.max(0,n-63),n+1))?.[0]??"",o=e[hr(e,n+1-r.length)];return o==="{"||o===","}function dT(e,t){let n=hr(e,t),r=e.slice(Math.max(0,n-7),n+1);return!/[\w$)\]]$/.test(r)||$P.test(r)}function uT(e){let t=tc(e);if(t==="python")return"python";if(t==="osascript")return"opaque";return t==="node"||t==="bun"||t==="deno"?"javascript":"simple"}var mT={python:"#",javascript:"/"};function fT(e,t){if(t==="opaque")return{kind:"unmaskable"};let n={masked:e.split(""),literals:[]};return kg(e,0,t,n,!1)===null?{kind:"unmaskable"}:{kind:"masked",masked:n.masked.join(""),literals:n.literals}}function kg(e,t,n,r,o){let i=0;for(let s=t;s<e.length;s++){let a=e[s]??"";if(o&&a==="}"&&i===0)return s;if(o&&a===mT[n])return null;if(a==="{")i++;if(a==="}")i--;if(n==="simple"&&(a==="`"||a==="%"||a==="<")){if(gP.test(e.slice(s)))return null}let l=a==="'"||a==='"'||n==="javascript"&&a==="`"?a:null;if(l===null)continue;if(l==="`"&&yT(e,s))return null;let c=n==="python"?gT(e,s):"",d=n==="python"&&e.startsWith(l.repeat(3),s)?l.repeat(3):l,f=s+d.length,u=l==="`"||/[fF]/.test(c),m=s-c.length,p=u?pT(e,m,f,d,n,r):hT(e,f,d);if(p===null)return null;if(!u){let g=e.slice(f,p);if(n==="simple"&&l==='"'&&hP.test(g))return null;r.literals.push({start:f,text:g,tokenStart:m,tokenEnd:p+d.length}),r.masked.fill(" ",f,p)}r.masked.fill(" ",s,f),r.masked.fill(" ",p,p+d.length),s=p+d.length-1}return o?null:e.length}function pT(e,t,n,r,o,i){let s=o==="python"?"{":"${",a=r==="`"||r.length===3,l="";for(let c=n;c<e.length;c++){let d=e[c]??"";if(e.startsWith(r,c))return i.literals.push({start:n,text:l,tokenStart:t,tokenEnd:c+r.length}),c;if(!a&&(d===`
48
48
  `||d==="\r"))return null;let f=o==="python"&&(d==="{"||d==="}")&&e[c+1]===d;if(!f&&e.startsWith(s,c)){let p=kg(e,c+s.length,o,i,!0);if(p===null)return null;l+=`${s}}`,i.masked.fill(" ",c,c+s.length),i.masked[p]=" ",c=p;continue}let m=d==="\\"&&!(o==="python"&&e[c+1]==="{")||f?2:1;l+=e.slice(c,c+m),i.masked.fill(" ",c,c+m),c+=m-1}return null}function gT(e,t){return pP.exec(e.slice(Math.max(0,t-3),t))?.[1]??""}function hT(e,t,n){let r=n.length===3;for(let o=t;o<e.length;o++){let i=e[o];if(i==="\\"){o++;continue}if(!r&&(i===`
49
49
  `||i==="\r"))return null;if(e.startsWith(n,o))return o}return null}function yT(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 CT(e){for(let t of e.matchAll(/[A-Za-z_$][A-Za-z0-9_$]*/g)){let n=t[0],r=t.index;if(XA.has(n.toLowerCase()))return!0;let o=Og(n);if(!o.some((i)=>JA.has(i)))continue;if(o.length>1)return!0;if(e[hr(e,r)]===".")return!0;if(e[kn(e,r+n.length)]==="(")return!0}return!1}function Og(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_$\s]+/).map((t)=>t.toLowerCase())}function hr(e,t){for(let n=t-1;n>=0;n--)if(!/\s/.test(e[n]??""))return n;return-1}function kn(e,t){for(let n=t;n<e.length;n++)if(!/\s/.test(e[n]??""))return n;return e.length}function ST(e,t,n,r,o,i){return _T(e).flatMap((s)=>{let a=t.getShellSyntax(s);if(a.status==="invalid")return[];return[...yr(a,t,{...n,displayOperandsAreCapturedOutput:!0},r,o,i),...bT(a,r)?vT(a,r).map((l)=>({target:l,cwd:o})):[]]})}function bT(e,t){let n=ki(e);for(let r=0;r<n.length;r++){let o=n[r];if(o?.kind!=="word"||ke(kt(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=kt(s.text,t);if(a==="--decode"||!a.startsWith("--")&&a.startsWith("-")&&/[dD]/.test(a))return!0}}return!1}function vT(e,t){return ki(e).flatMap((n)=>n.kind==="word"?[kt(n.text,t)]:n.kind==="redirection"&&n.target?[kt(n.target,t)]:[]).flatMap(rc)}function rc(e){let t=wT(e);if(t===null)return[];let n=Buffer.from(t,"base64").toString("utf8");if(n===""||ET(n))return[];return Buffer.from(n,"utf8").toString("base64").replace(/=+$/g,"")===t.replace(/=+$/g,"")?[n]:[]}function ET(e){return Array.from(e).some((t)=>{let n=t.charCodeAt(0);return n<32||n===127})}function wT(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 _T(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(Ir(o,n))continue;if(Dg(e,r,n)){let i=RT(e,r+1);if(i!==null)t.push(i.body),r=i.endIndex;continue}if(!n.inSingle&&o==="`"){let i=xT(e,r);if(i!==null)t.push(i.body),r=i.endIndex}}return t}function RT(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(Ir(i,n))continue;if(Dg(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 xT(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 Dg(e,t,n){return!n.inSingle&&e[t]==="$"&&e[t+1]==="("&&e[t+2]!=="("}function AT(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 d=/^--([^=]+)(?:=(.*))?$/.exec(c);if(d!==null){let f=d[1]??"",u=d[2];if(f===cP)o=!0;if(uP.has(f))r=!0;if(u!==void 0){if(f===ag)t.push(u);continue}if(fP.has(f)){let m=e[l+1];if(f===ag&&m!==void 0)t.push(m);l++}continue}if(c.startsWith("-")&&c.length>1){let f=c.slice(1),u="",m="";for(let g=0;g<f.length;g++){let h=f[g]??"";if(dP.has(h))r=!0;if(mP.has(h)){u=h,m=f.slice(g+1);break}}if(u==="")continue;if(m.length>0){if(u===sg)t.push(m);continue}let p=e[l+1];if(u===sg&&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)=>!Mg(n)&&!/^[A-Za-z_][A-Za-z0-9_]*=.*/.test(n));return t===-1?[]:e.slice(t)}function Mg(e){return e==="env"||e==="command"||e==="builtin"||e==="sudo"}var PT=new Set(["id_rsa.pub","id_ed25519.pub","id_ecdsa.pub"]),TT=".env.",IT=new Set([".env.example",".env.sample",".env.template",".env.tpl",".env.defaults"]),kT=[".env.example.",".env.sample."];function OT(e){let t;try{t=new URL(e.trim())}catch{return!1}return t.protocol!=="file:"&&t.host!==""}function DT(e){return e.length>0&&!/\s/.test(e)}function ys(e,t,n,r){let o=Ng(e,t,n,r);return o!==""&&n.paths.entryKind(o)!=="missing"}function Ng(e,t,n,r){try{return vo(e,t,n,r)}catch(o){if(o instanceof F)throw o;return""}}var MT=/[?&][^?&=/]+=/,NT=new Set(["node_modules","__pycache__"]),LT=[["vendor","bundle"],["vendor","cache"]];function WT(e,t,n,r,o){if(OT(e))return null;let i=Fe(e,t,r,o);if(!i)return null;let s=V(i.split("/").pop()??""),a=V(i),l=()=>DT(s)||ys(e,t,r,o),c=V($T(e,t,r,o));for(let u of ra){let m=`~/${u.suffixParts.join("/")}`;if((hg(a,m)||hg(c,m))&&Lt(u.id,n))return u.id}if(IT.has(s)||kT.some((u)=>s.startsWith(u)))return null;let d=FT(i,t,n,r,o);if(d)return d;if(PT.has(s))return null;for(let u of na)if(s===u.basename&&Lt(u.id,n))return u.id;if(s.startsWith(TT)&&Lt(Zo.id,n)&&l())return Zo.id;for(let u of oa)if(s.length>u.prefix.length&&s.startsWith(u.prefix)){let m=s.slice(u.prefix.length)[0];if((m==="-"||m==="_")&&Lt(u.id,n)&&l())return u.id}for(let u of ia)if(s.length>u.prefix.length&&s.startsWith(u.prefix)){if(s.slice(u.prefix.length)===u.suffix&&Lt(u.id,n))return u.id}if(HT(a))return null;if(!s.includes(".")&&Or.pattern.test(s)&&Lt(Or.id,n))return Or.id;if(MT.test(e)&&!ys(e,t,r,o))return null;let f=BT(s,n);if(f)return f;return null}function FT(e,t,n,r,o){return Xo.find((i)=>{if(!Lt(i.id,n))return!1;switch(i.id){case"secret.cli.claude-code":return H(e,K(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),[".credentials.json"]);case"secret.cli.claude-code.config":{let s=V(e).split("/");return H(e,K(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),["settings.json","settings.local.json"])||So(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,Fe("~/.gemini/config",t,r,o),["hooks.json","mcp_config.json"]);case"secret.cli.codex":{let s=K(r.env.get("CODEX_HOME"),"~/.codex",t,r,o);return H(e,s,["auth.json",".credentials.json"])||gr(e,s,["secrets",".sandbox-secrets"])}case"secret.cli.codex.config":{let s=K(r.env.get("CODEX_HOME"),"~/.codex",t,r,o),a=V(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,ue(K(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=V(e).split("/"),a=r.env.get("GEMINI_CLI_SYSTEM_SETTINGS_PATH"),l=r.env.get("ProgramData")?[ue(K(r.env.get("ProgramData"),"",t,r,o),"gemini-cli")]:[];return H(e,ue(K(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()?So(e,a,t,r,o):!1)||["/Library/Application Support/GeminiCli","/etc/gemini-cli",...l].some((c)=>H(e,Fe(c,t,r,o),["settings.json"]))}case"secret.cli.copilot-cli":{let s=K(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o);return H(e,s,["config.json"])||gr(e,s,["mcp-oauth-config","mcp-secrets"])}case"secret.cli.copilot-cli.config":return H(e,K(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o),["mcp-config.json"]);case"secret.cli.kimi-code":{let s=K(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),a=K(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o);return H(e,s,["server.token"])||gr(e,s,["credentials"])||gr(e,a,["credentials","mcp-oauth"])}case"secret.cli.kimi-code.config":{let s=["config.toml","mcp.json"],a=V(e).split("/");return a.at(-1)==="mcp.json"&&a.at(-2)===".kimi-code"||H(e,K(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),s)||H(e,K(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o),[...s,"config.json","config.json.bak"])}case"secret.cli.opencode":{let s=ue(K(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),"opencode"),a=V(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((d)=>So(e,d,t,r,o))}case"secret.cli.opencode.config":{let s=ue(K(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"opencode"),a=r.env.get("ProgramData")?[ue(K(r.env.get("ProgramData"),"",t,r,o),"opencode")]:[],l=["opencode.json","opencode.jsonc"],c=r.env.get("OPENCODE_CONFIG");return l.includes(V(e).split("/").at(-1)??"")||H(e,s,["config.json"])||(c?.trim()?So(e,c,t,r,o):!1)||["/Library/Application Support/opencode","/etc/opencode",...a].some((d)=>H(e,Fe(d,t,r,o),l))}case"secret.cli.pi":return H(e,K(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["auth.json"]);case"secret.cli.pi.config":return H(e,K(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["models.json"]);case"secret.cli.amp":{let s=Fe("~",t,r,o);return[ue(K(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),"amp"),ue(s,".local","share","amp")].some((l)=>H(e,l,["secrets.json"]))||gr(e,ue(s,".amp"),["oauth"])}case"secret.cli.amp.config":{let s=["settings.json","settings.jsonc"],a=[ue(K(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"amp"),ue(Fe("~",t,r,o),".config","amp")],l=V(e).split("/"),c=r.env.get("AMP_SETTINGS_FILE");return a.some((d)=>H(e,d,s))||l.at(-2)===".amp"&&s.includes(l.at(-1)??"")||(c?.trim()?So(e,c,t,r,o):!1)}case"secret.cli.cursor":{let s=ue(K(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"cursor"),a=ue(K(r.env.get("CURSOR_DATA_DIR"),"~/.cursor",t,r,o),"projects");return H(e,Fe("~/.cursor",t,r,o),["auth.json"])||H(e,s,["auth.json"])||V(e).split("/").at(-1)==="mcp-auth.json"&&On(V(e),V(a))}case"secret.cli.cursor.config":{let s=V(e).split("/");return s.at(-1)==="mcp.json"&&s.at(-2)===".cursor"}case"secret.cli.grok-build":return H(e,K(r.env.get("GROK_HOME"),"~/.grok",t,r,o),["auth.json","mcp_credentials.json"]);case"secret.cli.grok-build.config":{let s=V(e).split("/");return s.at(-1)==="config.toml"&&s.at(-2)===".grok"||H(e,K(r.env.get("GROK_HOME"),"~/.grok",t,r,o),["config.toml","managed_config.toml","requirements.toml"])||H(e,Fe("/etc/grok",t,r,o),["managed_config.toml","requirements.toml"])}case"secret.cli.droid":return H(e,Fe("~/.factory",t,r,o),["auth.encrypted","auth.v2.file","auth.v2.key","auth.v2.loginkeychain"]);case"secret.cli.droid.config":{let s=V(e).split("/");return s.at(-1)==="mcp.json"&&s.at(-2)===".factory"||H(e,Fe("~/.factory",t,r,o),["settings.json","hooks.json"])}case"secret.cli.devin":return[K(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),Fe("~/.local/share",t,r,o)].some((s)=>H(e,ue(s,"devin"),["credentials.toml"])||gr(e,ue(s,"devin","mcp"),["oauth"]));case"secret.cli.devin.config":return[K(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),Fe("~/.config",t,r,o)].some((s)=>H(e,ue(s,"devin"),["config.json"]));default:return!1}})?.id??null}var gg=new WeakMap;function K(e,t,n,r,o){let i=gg.get(o)??new Map;gg.set(o,i);let s=`${n}\x00${e??""}\x00${t}`,a=i.get(s);if(a!==void 0)return a;let l=Fe(e?.trim()?e:t,n,r,o);return i.set(s,l),l}function H(e,t,n){return n.some((r)=>Lg(e,ue(t,r)))}function gr(e,t,n){return n.some((r)=>On(V(e),V(ue(t,r))))}function So(e,t,n,r,o){return Lg(e,Fe(t,n,r,o))}function Lg(e,t){return V(e)===V(t)}function ue(e,...t){return ft([e,...t].filter(Boolean).join("/"))}function GT(e,t,n,r,o,i){if(n.length===0)return!1;let s=V(vo(e,t,o,i));return n.some((a)=>On(s,V(vo(a,r,o,i))))}function zT(e,t,n,r,o,i){if(n.length===0)return!1;let s=V(vo(e,t,o,i));if(!s)return!1;let a=o.env.get("HOME")??o.home,l=a?ft(N(be(a),o.paths,i)):"",c=V(l),d=o.env.get("CC_SAFETY_NET_HOME"),f=V(d?ft(N(Ie.resolve(be(d)),o.paths,i)):l&&ft(N(`${l}/.cc-safety-net`,o.paths,i)));if(f&&On(s,f))return!1;return n.some((u)=>{let m=ca(u);if(m&&Ie.posix.basename(s)!==V(m.name))return!1;let p=V(vo(m?.root??u,r,o,i));if(!p)return!1;if(c&&(c===p||c.startsWith(p.endsWith("/")?p:`${p}/`)))return!1;return On(s,p)&&!(m&&s===p)})}function HT(e){let t=e.split("/");return t.some((n)=>NT.has(n))||LT.some(([n,r])=>t.some((o,i)=>o===n&&t[i+1]===r))}function BT(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 sa)if(r===o.extension&&Lt(o.id,t))return o.id;for(let o of aa)if(o.pattern.test(r)&&Lt(o.id,t))return o.id;return null}function V(e){return e.toLowerCase()}function Lt(e,t){return!t?.disabledRules?.includes(e)}function Fe(e,t,n,r){let{home:o,normalized:i}=oc(e,n,r);if(!i)return"";if(!o)return i;let s=ic(i,o),a=Ie.isAbsolute(s)?s:ft(Ie.resolve(t,s)),l=ft(N(a,n.paths,r));if(!On(l,o)){if(Ie.isAbsolute(s))return l;return l===a?i:l}let c=l.slice(o.length);return c?`~${c}`:"~"}function hg(e,t){return e===t||e.startsWith(`${t}/`)}function $T(e,t,n,r){let{home:o,normalized:i}=oc(e,n,r);if(!i||!o)return"";let s=ic(i,o),a=Ie.posix.normalize(Ie.isAbsolute(s)?s:ft(Ie.resolve(t,s))),l=ft(be(n.env.get("HOME")??n.home)),c=(u)=>process.platform==="win32"?u.toLowerCase():u,d=[o,l].find((u)=>u!==""&&On(c(a),c(u)));if(d===void 0)return"";let f=a.slice(d.length);return f?`~${f}`:"~"}function vo(e,t,n,r){let{home:o,normalized:i}=oc(e,n,r);if(!i)return"";let s=o?ic(i,o):i;return ft(N(Ie.isAbsolute(s)?s:Ie.resolve(t,s),n.paths,r))}function oc(e,t,n){let r=t.env.get("HOME")??t.home,o=r?ft(N(be(r),t.paths,n)):"",i=ft(be(UT(kt(e,t))));return{home:o,normalized:i}}function UT(e){if(!e.trim().toLowerCase().startsWith("file:"))return e;try{return yg.fileURLToPath(e)}catch{return e}}function ic(e,t){if(e==="~")return t;if(e.startsWith("~/"))return ue(t,e.slice(2));return e}function jT(e){if(process.platform==="win32")return!0;return Ie.win32.parse(e).root.length>1}function ft(e){let t=e.trim(),n=(t.includes("\\")&&jT(t)?t.replace(/\\/g,"/"):t).replace(/\/{2,}/g,"/").replace(/^\.\//,"");if(n==="/")return n;return n.replace(/\/+$/g,"")}function On(e,t){return e===t||e.startsWith(t.endsWith("/")?t:`${t}/`)}function ke(e){return e.split(/[\\/]/).pop()?.replace(/\.exe$/i,"")??e}class Dn 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 VT={findPolicyMutation:rg,findGitMetadataMutation:Pm,resolveGitMetadata:ZT,loadPolicySnapshot:du,findSensitiveTarget:Eg,analyzeCommand:qp,getModes:Ws},KT=/^(?:\S*\/)?(?:ba|da|z|k)?sh(?:\s+-[A-Za-z-]*)*$/,qT=["workdir","cwd","working_directory"];function sc(e,t){let n={...VT,...t.dependencies},r=QT(e),o=()=>tn("config-load",r,()=>n.loadPolicySnapshot(t.environment,{...t.policyOptions,cwd:e.context.configCwd})),i=e.route.kind==="unknown"&&r?o():void 0,s=i?.policy.commandTools.find((I)=>I.name===e.toolName),a=s&&r?YT(e,r,s.cwd,t.environment.paths):e;if("decision"in a)return a;let l=a,c=l===e?{}:{promotedInvocation:l},d=Eo(l)?l.command:r,f=tn("policy-protection",d,()=>xm(l)),u=Jn(f,"input-candidate"),m=Jn(f,"declared-command");if(Eo(l)&&l.command?.trim()&&m?.program.status==="limited")return{stage:"command-analysis",...c,decision:{kind:"deny",reason:gt,ruleId:"analysis.recursion-limit",intent:"stop_and_explain",evidence:{command:l.command,segment:l.command}}};if(u?.program.status==="limited")return{stage:"command-validation",...c,decision:{kind:"deny",reason:Rm,ruleId:"analysis.structural-limit",intent:"stop_and_explain"}};let p=Se(),g=tn("policy-protection",d,()=>n.resolveGitMetadata([l.context.executionCwd,l.context.configCwd],t.environment)),h=tn("policy-protection",d,()=>n.findPolicyMutation(f,t.environment,p));if(h){let I=d??h.target;return{stage:"policy-protection",...c,decision:{kind:"deny",reason:ng,ruleId:"guard.policy-config",intent:"hard_stop",evidence:{command:I,segment:h.target}}}}let y=tn("policy-protection",d,()=>Jp(f,t.environment,p));if(y){let I=d??y.target;return{stage:"policy-protection",...c,decision:{kind:"deny",reason:Xp,ruleId:"guard.policy-apply",intent:"hard_stop",evidence:{command:I,segment:y.target}}}}let b=tn("policy-protection",d,()=>n.findGitMetadataMutation(f,g,t.environment,p));if(b){let I=d??b.target;return{stage:"policy-protection",...c,decision:{kind:"deny",reason:xe,ruleId:"guard.git-metadata",intent:"hard_stop",evidence:{command:I,segment:b.target}}}}let S=i??o(),v=S.policy,A=n.getModes(v,t.environment.env),P={level:A.effectiveLevel,...XT(S),...c},k=v.secretProtection.enabled===!1?null:tn("secret-protection",d,()=>n.findSensitiveTarget(f,v.secretProtection,t.environment,p,{strict:Eo(l)||u?.program.dialect==="powershell"?A.strict:void 0}));if(k){let I=d??k.target;return{stage:"secret-protection",...P,decision:{kind:"deny",reason:Cg,intent:"hard_stop",ruleId:k.ruleId,evidence:{command:I,segment:k.target}}}}if(!Eo(l))return{stage:"non-command",...P,decision:{kind:"allow"}};if(!l.command||l.command.trim()==="")return{...Cs("command-validation",d),...P};let C=tn("command-analysis",d,()=>Yp(()=>n.analyzeCommand(l.command,{cwd:l.context.executionCwd,shell:l.route.shell,policySnapshot:S,environment:t.environment,protectedGitMetadata:g,effectiveCapabilities:A.capabilities,worktreeMode:A.worktreeMode,budget:p,...t.trace?{trace:t.trace}:{}},JT(f),f.store),l.command,t.trace)),O=l.route.shell==="auto"&&f.store.readsAutoAsPowerShell()?()=>{let I=t.trace?.branch(),se={...sc({...l,route:{kind:"command",shell:"posix"}},{...t,...I?{trace:I.trace}:{},dependencies:{...t.dependencies,loadPolicySnapshot:()=>S,resolveGitMetadata:()=>g}}),...c};return{decision:se.decision,withItsTrace:()=>(I?.adopt(),se)}}:void 0;if(C.decision){let I=!A.strict&&(C.decision.ruleId==="raw-text.dangerous-command"||C.decision.reason===to&&!KT.test(C.decision.evidence?.segment??"")&&qe(l.command)===null),se=I?O?.():void 0;if(se?.decision.kind==="deny"&&!se.decision.unverifiedByStandardMode)return se.withItsTrace();return{stage:"command-analysis",...P,..."errorCode"in C?{errorCode:C.errorCode}:{},decision:I?{...C.decision,unverifiedByStandardMode:!0}:C.decision}}return O?.().withItsTrace()??{stage:"command-analysis",...P,decision:{kind:"allow"}}}function YT(e,t,n,r){let o=[...new Set((n?[n]:qT).flatMap((l)=>{let c=Object.getOwnPropertyDescriptor(e.input,l);return c?[c.value]:[]}))],i=o.filter((l)=>typeof l==="string"&&l.trim()!=="");if(o.length>1||i.length!==o.length)return Cs("command-validation",t);let s=i[0],a=s===void 0?e.context.configCwd:xr(s,e.context.configCwd,r);if(!a){let l=Oo({directory:"requested",problem:"unusable",cwd:s??""});return{stage:"command-validation",decision:{kind:"deny",reason:l.reason,ruleId:l.ruleId,intent:l.intent,evidence:{command:t,segment:t}}}}return zo(e.toolName,e.input,{kind:"command",shell:"auto"},{configCwd:e.context.configCwd,executionCwd:a},t)}function ZT(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 XT(e){if(e.state==="ready")return{};return{configFallback:{reason:e.reason}}}function JT(e){return Jn(e,"declared-command")?.program}function QT(e){try{return Ft(e.input)}catch(t){let n=Eo(e)?e.command:void 0;throw new Dn("policy-protection",Cs("policy-protection",t instanceof Re?void 0:n,t),t)}}function tn(e,t,n){try{return n()}catch(r){throw new Dn(e,Cs(e,r instanceof Re?void 0:t,r),r)}}function Cs(e,t,n){let r=n instanceof Cn?{reason:St,ruleId:"analysis.strict-unparseable"}:n instanceof F||n instanceof ct?{reason:_s,ruleId:"analysis.limit"}:{reason:Er,ruleId:"analysis.failed-closed"};return{stage:e,decision:{kind:"deny",...r,intent:"stop_and_explain",...t?{evidence:{command:t,segment:t}}:{}}}}function Eo(e){return e.route.kind==="command"}var bs=require("node:fs"),Sr=require("node:path");var pe=require("node:fs"),Cr=require("node:path");function Wg(e,t={}){return ii(cn(e,t),e.home).policy.audit.retention_days}var lc=86400000,eI=".last-prune",tI=/^\d{4}-\d{2}$/,nI=/^((\d{4}-\d{2})-\d{2})-.+\.jsonl$/,Fg=(e)=>Math.floor(e/lc);function zg(e,t,n=()=>new Date){try{let r=n().getTime();if(!pe.statSync(t,{throwIfNoEntry:!1})?.isDirectory())return;let o=Cr.join(t,eI),i=pe.statSync(o,{throwIfNoEntry:!1})?.mtimeMs;if(i!==void 0&&Fg(i)===Fg(r))return;let s=r-Wg(e)*lc,a=new Date(r).toISOString().slice(0,7);for(let l of ac(t)){if(l.isDirectory()){rI(Cr.join(t,l.name),s,a);continue}if(l.isFile()&&l.name.endsWith(".jsonl"))oI(Cr.join(t,l.name),s)}pe.writeFileSync(o,"",{mode:384}),pe.utimesSync(o,r/1000,r/1000)}catch{}}function rI(e,t,n){for(let r of ac(e)){if(!r.isDirectory()||!tI.test(r.name))continue;let o=Cr.join(e,r.name);for(let i of ac(o)){if(!i.isFile())continue;let s=nI.exec(i.name);if(!s||s[2]!==r.name)continue;let a=Date.parse(`${s[1]}T00:00:00.000Z`)+lc;if(!Number.isFinite(a)||a>=t)continue;Hg(Cr.join(o,i.name))}if(r.name!==n)Gg(o)}Gg(e)}function oI(e,t){try{let n=pe.lstatSync(e);if(n.mtimeMs>=t)return;let r=pe.readFileSync(e,"utf-8").split(`
50
- `).filter((o)=>o.trim()).map(iI);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(pe.lstatSync(e).mtimeMs!==n.mtimeMs)return;Hg(e)}catch{}}function iI(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 ac(e){try{return pe.readdirSync(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Hg(e){try{pe.unlinkSync(e)}catch{}}function Gg(e){try{pe.rmdirSync(e)}catch{}}var sI="2.6.15",aI=1e4,lI=2000,cI=256,dI=32768;function uI(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 mI(e){return(e??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function cc(e,t,n,r,o,i,s={}){let a=uI(t);if(!a)return;let l=pI(e);if(!l)return;try{let c=(s.now??(()=>new Date))().toISOString(),d=Ss(Rt(n),s.failureStage?Number.POSITIVE_INFINITY:aI),f=Ss(Rt(r),lI),u=s.toolName?Ss(Rt(s.toolName),cI):void 0,m=i===null?void 0:Ss(Rt(i),dI),p=Sr.join(l,mI(m?.value??null),c.slice(0,7));bs.mkdirSync(p,{recursive:!0,mode:448});let g=Sr.join(p,`${c.slice(0,10)}-${a}.jsonl`),h={ts:c,id:(s.createId??Fs)(),v:sI,sessionId:a,decision:s.decision??"deny",agent:s.agent,shape:s.shape,level:s.level,configFallback:s.configFallback,toolName:u?.value,command:d.value,segment:f.value,...d.truncated||f.truncated||u?.truncated||m?.truncated?{truncated:!0}:{},reason:o,ruleId:s.ruleId,intent:s.intent,failureStage:s.failureStage,errorCode:s.errorCode,cwd:m?.value??null};bs.appendFileSync(g,`${JSON.stringify(h)}
50
+ `).filter((o)=>o.trim()).map(iI);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(pe.lstatSync(e).mtimeMs!==n.mtimeMs)return;Hg(e)}catch{}}function iI(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 ac(e){try{return pe.readdirSync(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Hg(e){try{pe.unlinkSync(e)}catch{}}function Gg(e){try{pe.rmdirSync(e)}catch{}}var sI="2.6.16",aI=1e4,lI=2000,cI=256,dI=32768;function uI(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 mI(e){return(e??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function cc(e,t,n,r,o,i,s={}){let a=uI(t);if(!a)return;let l=pI(e);if(!l)return;try{let c=(s.now??(()=>new Date))().toISOString(),d=Ss(Rt(n),s.failureStage?Number.POSITIVE_INFINITY:aI),f=Ss(Rt(r),lI),u=s.toolName?Ss(Rt(s.toolName),cI):void 0,m=i===null?void 0:Ss(Rt(i),dI),p=Sr.join(l,mI(m?.value??null),c.slice(0,7));bs.mkdirSync(p,{recursive:!0,mode:448});let g=Sr.join(p,`${c.slice(0,10)}-${a}.jsonl`),h={ts:c,id:(s.createId??Fs)(),v:sI,sessionId:a,decision:s.decision??"deny",agent:s.agent,shape:s.shape,level:s.level,configFallback:s.configFallback,toolName:u?.value,command:d.value,segment:f.value,...d.truncated||f.truncated||u?.truncated||m?.truncated?{truncated:!0}:{},reason:o,ruleId:s.ruleId,intent:s.intent,failureStage:s.failureStage,errorCode:s.errorCode,cwd:m?.value??null};bs.appendFileSync(g,`${JSON.stringify(h)}
51
51
  `,{encoding:"utf-8",mode:384}),zg(e,l,s.now)}catch{}}function Ss(e,t){return{value:e.slice(0,t),truncated:e.length>t}}function fI(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&&Sr.isAbsolute(n)?n:null}function pI(e){let t=fI(e);return t?Sr.join(t,".cc-safety-net","logs"):null}function $g(e,t,n,r=!0,o){if(t.decision.kind==="allow"){if(!n||e.route.kind!=="command")return;let a=Bg(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?Bg(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 Bg(e){return"command"in e?e.command??"":""}function Ug(e,t,n,r){if(!t)return;let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;cc(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 jg(e,t,n,r){let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;cc(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 Kg(e,t,n){try{let r=sc(t,{environment:e,...n.guard});return Vg(e,t,r,n),r}catch(r){if(!(r instanceof Dn))throw r;throw Vg(e,t,r.evaluation,n,!(r.cause instanceof Re),{stage:r.stage,errorCode:gI(r.cause)}),r}}function Vg(e,t,n,r,o=!0,i){Ug(e,$g(n.promotedInvocation??t,n,r.guard?.auditAllowed??!1,o,i),r.audit.getSessionId,{agent:r.audit.agent,shape:r.audit.shape})}function gI(e){if(e instanceof F)return X[e.kind].errorCode;if(e instanceof Re)return"tool-input-limit";if(e instanceof ct)return"structural-shell-syntax-limit";if(e instanceof Cn)return"unparseable-command";return"unexpected-error"}var wo=(e,t,n,r,o)=>Gc(e.cwd,t,n,r,o.paths,process.cwd()),nn=(e,t,n)=>(r,o,i,s,a)=>{let l=wo(r,o,i,s,a);if(!l)return null;let c=r.tool_input;if(!t.has(i)||!c||!Object.hasOwn(c,e))return l;let d=c[e];if(n?.emptyMeansSessionCwd&&d==="")return l;if(typeof d!=="string"||d.trim()==="")return oe(s,o,i),null;let f=n?.allowOutsideSessionCwd?xr(d,l.configCwd,a.paths):yt(d,[l.configCwd],a.paths);if(f)return{configCwd:l.configCwd,executionCwd:f};return Me(s,o,i,{directory:"requested",problem:Ct(d,l.configCwd,a.paths),cwd:d}),null};function hI(e,t){let n=Nc(t);if(console.log(JSON.stringify(e.createDenyOutput(n))),e.denyExitCode===void 0)return;console.error(n),process.exitCode=e.denyExitCode}async function yI(e){let t;try{t=(await Fc(process.stdin)).trim()}catch{e({reason:"Failed to parse hook input JSON."});return}if(!t){e({reason:"Missing hook input JSON."});return}return Mo(t,e,"Failed to parse hook input JSON.")}async function CI(e){let t=ed(),n=await yI(e.outputDeny);if(n===void 0)return;if(!n||typeof n!=="object"||Array.isArray(n)){oe(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=EI(n),s=(p,g)=>{jg(t,p,()=>e.getSessionId(n),{agent:r,shape:o,toolName:g,cwd:p.cwd??i}),e.outputDeny(p)},a=e.getToolName(n);if(typeof a!=="string"||a.trim()===""){oe((p)=>s(p),vI(n));return}let l=a,c=(p)=>s(p,l),d;try{d=e.getToolInput(n,l,c,t)}catch(p){if(!(p instanceof Re))throw p;oe(c,void 0,l);return}if(!d.ok)return;let f=e.getContext(n,d.input,l,c,t);if(!f)return;let u;try{u=Ft(d.input)}catch(p){if(!(p instanceof Re))throw p;oe(c,void 0,l);return}let m=zo(l,d.input,d.route,f,u??null);try{let p=Kg(t,m,{guard:{auditAllowed:od(t.env),dependencies:e.guardDependencies},audit:{agent:r,shape:o,getSessionId:()=>e.getSessionId(n)}}),g=Os(p,{includeEvidence:!0,toolName:p.stage==="command-analysis"?void 0:l});if(g){if(g.unverifiedByStandardMode&&e.outputAsk&&e.canPromptPerson?.(n)){e.outputAsk(g);return}e.outputDeny(g);return}e.outputAllow?.()}catch(p){if(!(p instanceof Dn))throw p;SI(p,t.env);let g=Os(p.evaluation,{includeEvidence:!0,toolName:p.evaluation.stage==="command-analysis"?void 0:l});if(g)e.outputDeny(g);return}}function SI(e,t){if(!xt(le.debug,t))return;console.error(`CC Safety Net debug: ${bI(e.stage)}: ${Wc(e.cause)}`)}function bI(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 vI(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 EI(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 we(e){let t=(s)=>hI(e,s),n=e.createAskOutput,r=n?(s)=>console.log(JSON.stringify(n(Lc(s)))):void 0,o=e.createAllowOutput,i=o?()=>console.log(JSON.stringify(o())):void 0;try{await CI({...e,outputDeny:t,outputAsk:r,outputAllow:i})}catch(s){console.error("CC Safety Net error:",s),t(ko())}}var wI=new Map([["run_command","auto"]]),_I="manage_task",RI=new Set(["absolutepath","directorypath","file_path","filepath","path","searchdirectory","searchpath","target_file","targetfile"]);function qg(e){return re(e,wI)}async function Yg(){await we({agent:"antigravity-cli",createDenyOutput:(e)=>({decision:"deny",reason:e}),isSupported:()=>!0,getToolName:(e)=>e.toolCall?.name,getToolInput:(e,t)=>{let n=TI(e.toolCall?.args,t);if(n===void 0)return{ok:!0,input:II(e.toolCall?.args,t),route:qg(t)};return{ok:!0,input:{command:n},route:{kind:"command",shell:"auto"}}},getContext:xI,getSessionId:(e)=>e.conversationId})}function xI(e,t,n,r,o){let i=PI(e);if(!i[0])return oe(r,t,n),null;let s=i.flatMap((d)=>{let f=sn([d],o.paths);return f?[f]:[]});if(!s[0])return Me(r,t,n,{directory:"session",problem:"unusable",cwd:i[0]}),null;if(n!=="run_command"){let d;try{d=AI(t,n,s,o.paths)}catch(f){if(f instanceof Re)return oe(r,void 0,n),null;if(!(f instanceof F))throw f;return oe(r,t,n),null}if(!d)return oe(r,t,n),null;return{configCwd:d,executionCwd:d}}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 oe(r,t,n),null;let c=yt(l,s,o.paths);if(c){let d=Zg(c,s);if(!d)return oe(r,t,n),null;return{configCwd:d,executionCwd:c}}return Me(r,t,n,{directory:"requested",problem:Ct(l,s[0],o.paths),cwd:l}),null}function AI(e,t,n,r){let o=qg(t),i=[...To(e,RI),...o.kind==="patch"?Io(e):[]].filter(dc.isAbsolute),s=Se(),a=new Set(i.flatMap((l)=>{let c=Zg(N(l,r,s),n);return c?[c]:[]}));if(a.size>1)return null;return[...a][0]??n[0]??null}function Zg(e,t){return t.filter((n)=>Ar(e,n)).reduce((n,r)=>r.length>n.length?r:n,"")||null}function PI(e){if(e.workspacePaths===void 0)return[process.cwd()];return Array.isArray(e.workspacePaths)?e.workspacePaths.filter((t)=>typeof t==="string"&&t.trim()!==""):[]}function TI(e,t){if(t!==_I||e?.Action!=="send_input")return;return typeof e.Input==="string"&&e.Input!==""?e.Input:void 0}function II(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 kI=["npx","--offline","--no-install","@deepseek-ai/dsh","--version"];var Xg=[{id:"antigravity-cli",displayName:"Antigravity CLI",runtime:{flags:["-ac","--agy-cli"],description:"Run as Antigravity CLI PreToolUse hook",legacyTopLevelFlags:[]},install:{flag:"--agy-cli",artifactKind:"hook config",probeCommand:["agy","--version"]}},{id:"claude-code",displayName:"Claude Code",runtime:{displayName:"Coding CLI",flags:["-cc","--coding-cli"],legacyFlags:["--claude-code"],description:"Run as Coding CLI PreToolUse hook",legacyTopLevelFlags:["-cc","--claude-code"]},install:{flag:"--claude-code",artifactKind:"plugin",probeCommand:["claude","--version"]}},{id:"codex",displayName:"Codex",runtime:{flags:["-cx","--codex"],description:"Run as a Codex PreToolUse hook",legacyTopLevelFlags:[]},install:{flag:"--codex",artifactKind:"plugin",probeCommand:["codex","--version"]}},{id:"copilot-cli",displayName:"GitHub Copilot CLI",runtime:{flags:["-cp","--copilot-cli"],description:"Run as GitHub Copilot CLI PreToolUse hook",legacyTopLevelFlags:["-cp","--copilot-cli"]},install:{flag:"--copilot-cli",artifactKind:"plugin",probeCommand:["copilot","--binary-version"]}},{id:"gemini-cli",displayName:"Gemini CLI",runtime:{flags:["-gc","--gemini-cli"],description:"Run as Gemini CLI BeforeTool hook",legacyTopLevelFlags:["-gc","--gemini-cli"]},install:{flag:"--gemini-cli",artifactKind:"extension",probeCommand:["gemini","--version"]}},{id:"grok-build",displayName:"Grok Build",runtime:{flags:["-gb","--grok-build"],description:"Run as Grok Build PreToolUse hook",legacyTopLevelFlags:[]},install:{flag:"--grok-build",artifactKind:"hook config",probeCommand:["grok","--version"]}},{id:"hermes-agent",displayName:"Hermes Agent",runtime:{flags:["-ha","--hermes-agent"],description:"Run as Hermes Agent pre_tool_call hook",legacyTopLevelFlags:[]},install:{flag:"--hermes-agent",artifactKind:"plugin",probeCommand:["hermes","--version"]}},{id:"kimi-code",displayName:"Kimi Code",runtime:{flags:["-kc","--kimi-code"],description:"Run as Kimi Code PreToolUse hook",legacyTopLevelFlags:[]},install:{flag:"--kimi-code",artifactKind:"hook config",probeCommand:["kimi","--version"]}},{id:"openclaw",displayName:"OpenClaw",install:{flag:"--openclaw",artifactKind:"plugin",probeCommand:["openclaw","--version"]}},{id:"opencode",displayName:"OpenCode",install:{flag:"--opencode",artifactKind:"plugin",probeCommand:["opencode","--version"]}},{id:"pi",displayName:"Pi",install:{flag:"--pi",artifactKind:"package",probeCommand:["pi","--version"]}},{id:"cursor",displayName:"Cursor",runtime:{flags:["-cu","--cursor"],description:"Run as Cursor preToolUse hook",legacyTopLevelFlags:[]},install:{flag:"--cursor",artifactKind:"hook config",probeCommand:["cursor","--version"]}},{id:"deepseek-harness",displayName:"DeepSeek Harness",install:{flag:"--deepseek-harness",artifactKind:"package",probeCommand:kI}},{id:"devin",displayName:"Devin CLI",runtime:{flags:["-dv","--devin"],description:"Run as Devin CLI PreToolUse hook",legacyTopLevelFlags:[]},install:{flag:"--devin",artifactKind:"hook config",probeCommand:["devin","--version"]}},{id:"droid",displayName:"Factory Droid",runtime:{flags:["-fd","--droid"],description:"Run as Factory Droid PreToolUse hook",legacyTopLevelFlags:[]},install:{flag:"--droid",artifactKind:"hook config",probeCommand:["droid","--version"]}},{id:"amp",displayName:"Amp Code",install:{flag:"--amp",artifactKind:"plugin",probeCommand:["amp","--version"]}}],uc=Xg.slice().sort((e,t)=>e.displayName.localeCompare(t.displayName,"en")),pF=uc.map((e)=>e.id).sort((e,t)=>Number(t==="claude-code")-Number(e==="claude-code")),Jg=uc.filter((e)=>("runtime"in e)).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})),gF=uc.map((e)=>({id:e.id,...e.install})),hF=Object.fromEntries(Xg.map((e)=>[e.id,e.displayName]));var Mn=require("node:path");function Qg(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=Se(),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 Ar(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("COPILOT_CLI")==="1")return"copilot-cli";if(t.env.get("CLAUDECODE")==="1"||Boolean(t.env.get("CLAUDE_CODE_ENTRYPOINT")))return"claude-code";return"unknown"}var br="PreToolUse",eh="BeforeTool",th="pre_tool_call";async function rn(e){await we({agent:e.agent,...e.getAgent?{getAgent:e.getAgent}:{},denyExitCode:e.denyExitCode,createDenyOutput:(t)=>({hookSpecificOutput:{hookEventName:br,permissionDecision:"deny",permissionDecisionReason:t}}),...e.canPromptPerson?{canPromptPerson:e.canPromptPerson,createAskOutput:(t)=>({hookSpecificOutput:{hookEventName:br,permissionDecision:"ask",permissionDecisionReason:t}})}:{},isSupported:(t)=>t.hook_event_name===br,getToolName:(t)=>t.tool_name,getToolInput:(t,n,r,o)=>({ok:!0,input:t.tool_input,route:e.getToolRoute(n,t.tool_input,o)}),getContext:e.getContext??wo,getSessionId:(t)=>t.session_id})}var OI=new Map([["Bash","posix"],["PowerShell","powershell"],["Monitor","posix"]]),DI=["default","acceptEdits","plan","auto"];function MI(e,t,n){if(e==="Bash"&&n.env.get("COPILOT_CLI")==="1")return{kind:"command",shell:"auto"};return e==="Monitor"&&t?.command===void 0?re(e,new Map):re(e,OI)}async function nh(){await rn({agent:"claude-code",getAgent:(e,t)=>Qg(e.transcript_path,t),canPromptPerson:(e)=>DI.includes(e.permission_mode??""),getToolRoute:MI})}var NI=new Map([["Bash","auto"]]);async function rh(){await rn({agent:"codex",getToolRoute:(e)=>re(e,NI)})}var LI=new Map([["bash","auto"],["Bash","auto"],["powershell","powershell"],["PowerShell","powershell"]]);function WI(e){return re(e,LI)}async function oh(){await we({agent:"copilot-cli",createDenyOutput:(e)=>({permissionDecision:"deny",permissionDecisionReason:e}),isSupported:()=>!0,getToolName:(e)=>e.toolName,getToolInput:(e,t,n)=>{let r=WI(t);if(typeof e.toolArgs==="object"&&e.toolArgs!==null)return{ok:!0,input:e.toolArgs,route:r};if(typeof e.toolArgs!=="string")return n({reason:"Failed to parse toolArgs JSON."}),{ok:!1};if(r.kind==="patch"&&e.toolArgs.trimStart().startsWith("*** Begin Patch"))return{ok:!0,input:e.toolArgs,route:r};let i=Mo(e.toolArgs,n,"Failed to parse toolArgs JSON.");if(i===void 0)return{ok:!1};return{ok:!0,input:i,route:r}},getContext:wo,getSessionId:(e)=>typeof e.sessionId==="string"&&e.sessionId.trim()?e.sessionId:void 0})}var FI=new Map([["Shell","auto"]]);function GI(e){return re(e,FI)}async function ih(){await we({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:GI(t)}),getContext:zI,getSessionId:(e)=>e.conversation_id})}function zI(e,t,n,r,o){let i=HI(e);if(!i[0])return oe(r,t,n),null;let s=i.flatMap((u)=>{let m=sn([u],o.paths);return m?[m]:[]});if(!s[0])return Me(r,t,n,{directory:"session",problem:"unusable",cwd:i[0]}),null;let a=BI(e.cwd),l=yt(a,s,o.paths);if(!l)return Me(r,t,n,{directory:"session",problem:Ct(a,s[0],o.paths),cwd:a}),null;if(t===null||typeof t!=="object"||Array.isArray(t))return{configCwd:l,executionCwd:l};if(!Object.hasOwn(t,"working_directory"))return{configCwd:l,executionCwd:l};let c=t.working_directory;if(typeof c!=="string"||c.trim()==="")return oe(r,t,n),null;let d=wr(c),f=yt(d,s,o.paths);if(!f)return Me(r,t,n,{directory:"requested",problem:Ct(d,s[0],o.paths),cwd:d}),null;return{configCwd:l,executionCwd:f}}function HI(e){if(e.workspace_roots===void 0)return typeof e.cwd==="string"&&e.cwd.trim()!==""?[wr(e.cwd)]:[];if(!Array.isArray(e.workspace_roots))return[];return e.workspace_roots.filter((t)=>typeof t==="string"&&t.trim()!=="").map((t)=>wr(t))}function BI(e){return typeof e==="string"&&e.trim()!==""?wr(e):"."}var sh=new Map([["exec","auto"]]),$I="write_to_process",UI=/<(CR|LF)>/g,jI=/<(ESC|BS|UP|DOWN|LEFT|RIGHT|C-[a-z])>/g,VI=/<[A-Za-z][A-Za-z0-9-]*>/;function KI(e,t){if(e!==$I||typeof t!=="object"||t===null)return;let n=t.bytes_input,r=typeof n==="string"?n.replace(UI,`
52
52
  `):"",o=r.replace(jI,"");if(VI.test(o))return null;let i=t.text_input,s=typeof i==="string"&&i!=="",a=o.trim()!=="";if(s&&a)return null;if((s||a)&&o!==r)return null;if(s)return i;return a?o:void 0}async function ah(){await we({agent:"devin",createDenyOutput:(e)=>({decision:"block",reason:e}),isSupported:(e)=>e.hook_event_name===br,getToolName:(e)=>e.tool_name,getToolInput:(e,t,n)=>{let r=KI(t,e.tool_input);if(r===null)return oe(n,e.tool_input,t),{ok:!1};if(r===void 0)return{ok:!0,input:e.tool_input,route:re(t,sh)};return{ok:!0,input:{command:r},route:{kind:"command",shell:"auto"}}},getContext:nn("workdir",sh,{emptyMeansSessionCwd:!1,allowOutsideSessionCwd:!0}),getSessionId:(e)=>typeof e.session_id==="string"&&e.session_id!==""?e.session_id:void 0})}var qI=new Map([["Execute","auto"]]);async function lh(){await rn({agent:"droid",denyExitCode:2,getToolRoute:(e)=>re(e,qI)})}var ch=require("node:path");var dh=new Map([["run_shell_command","auto"]]);function YI(e){return re(e,dh)}function ZI(e,t,n){let r=e.replaceAll("\x00",""),o=(s)=>n.realpath(ch.resolve(t,s))!==null,i=r.slice(1).replace(/^[\\/]+/,"");if(!r.startsWith("@")||i===""||o(r))return r;if(/^@[\\/]/.test(r))return i;return o(`@${i.split(/[\\/]/)[0]}`)?r:i}function XI(e,t){let n=e.tool_input,r=n?.file_path;if(typeof r!=="string")return n;let o=ZI(r,typeof e.cwd==="string"?e.cwd:process.cwd(),t);return o===r?n:{...n,file_path:[r,o]}}async function uh(){await we({agent:"gemini-cli",createDenyOutput:(e)=>({decision:"deny",reason:e,systemMessage:e}),isSupported:(e)=>e.hook_event_name===eh,getToolName:(e)=>e.tool_name,getToolInput:(e,t,n,r)=>({ok:!0,input:XI(e,r.paths),route:YI(t)}),getContext:nn("dir_path",dh,{emptyMeansSessionCwd:!0,allowOutsideSessionCwd:!0}),getSessionId:(e)=>e.session_id})}var JI=new Map([["run_terminal_command","auto"],["run_terminal_cmd","auto"],["monitor","auto"],["bash","auto"],["Shell","auto"]]),QI=new Map([["bash","workdir"],["Shell","working_directory"]]);function ek(e){return re(e,JI)}async function mh(){await we({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 oe(n,e.toolInput,t),{ok:!1};return{ok:!0,input:e.toolInput,route:ek(t)}},getContext:tk,getSessionId:(e)=>e.sessionId})}function tk(e,t,n,r,o){let i=nk(e);if(!i)return oe(r,t,n),null;let s=sn([i],o.paths);if(!s)return Me(r,t,n,{directory:"session",problem:"unusable",cwd:i}),null;let a=rk(e.cwd),l=yt(a,[s],o.paths);if(!l)return Me(r,t,n,{directory:"session",problem:Ct(a,s,o.paths),cwd:a}),null;let c=QI.get(n),d=e.toolInput;if(!c||!d||!Object.hasOwn(d,c))return{configCwd:l,executionCwd:l};let f=d[c];if(typeof f!=="string"||f.trim()==="")return oe(r,t,n),null;let u=yt(f,[l,s],o.paths);if(u)return{configCwd:l,executionCwd:u};return Me(r,t,n,{directory:"requested",problem:Ct(f,l,o.paths),cwd:f}),null}function nk(e){let t=e.workspaceRoot===void 0?e.cwd:e.workspaceRoot;return typeof t==="string"&&t.trim()!==""?t:void 0}function rk(e){return typeof e==="string"&&e.trim()!==""?e:"."}var fh=new Map([["terminal","posix"]]);async function ph(){await we({agent:"hermes-agent",createDenyOutput:(e)=>({action:"block",message:e}),isSupported:(e)=>e.hook_event_name===th,getToolName:(e)=>e.tool_name,getToolInput:(e,t)=>({ok:!0,input:e.tool_input,route:re(t,fh)}),getContext:nn("workdir",fh,{emptyMeansSessionCwd:!1,allowOutsideSessionCwd:!0}),getSessionId:(e)=>e.session_id})}var gh=new Map([["Bash","posix"]]);function ok(e){return re(e,gh)}async function hh(){await rn({agent:"kimi-code",getToolRoute:ok,getContext:nn("cwd",gh)})}var ik={"antigravity-cli":Yg,"claude-code":nh,codex:rh,"copilot-cli":oh,cursor:ih,devin:ah,droid:lh,"gemini-cli":uh,"grok-build":mh,"hermes-agent":ph,"kimi-code":hh},mc=Jg.map((e)=>({...e,run:ik[e.id]}));function yh(e){let t=Ro({label:"hook",booleans:Object.fromEntries(mc.map((r)=>[r.id,[...r.flags,...r.legacyFlags]]))},e);if(t.errors.length>0)return;let n=mc.filter((r)=>t.flags[r.id]);return n.length===1?n[0]:void 0}function Ch(e){return mc.find((t)=>t.legacyTopLevelFlags.some((n)=>n===e))}async function sk(){let e=process.argv.slice(2),t=e[0],n=Ro({label:"cc-safety-net",booleans:{version:["-V","--version"]},positionals:"list"},e);if(!n.help&&!n.flags.version){if(t?.toLowerCase()==="hook"){let i=yh(e.slice(1));if(i){await i.run();return}}let o=Ch(t);if(o){await o.run();return}}let r=await import("../cli.js");await r.runCli(e)}sk().catch((e)=>{console.error("CC Safety Net error:",e),process.exit(1)});
@@ -0,0 +1,2 @@
1
+ import{Z,x,it,l}from"./index-pzctbrv3.js";import{H,me,Te}from"./index-90bkfxht.js";import{resolve as f}from"node:path";var et=new Map([["bash","posix"],["pwsh","powershell"]]),g={agent:"deepseek-harness",debugLabel:"deepseek-harness tool guard",extract:(e,i,r)=>w(e,i,r),getSessionId:(e)=>e?.agent?.session.header.id,allow:void 0,block:(e)=>Z(e),includeEvidenceOnError:(e)=>e.route.kind==="command"};function yt(e){let i=k();e.tools.guard((r)=>i(r,process.cwd()))}function k(e={}){return Te(g,e)}function w(e,i,r){if(!e||typeof e!=="object")return H(null);let d=e,n=d.name;if(typeof n!=="string"||n.trim()==="")return H(null);let u=d.agent?.session.header.cwd??i,o=it([u],r);if(!o)return me({directory:"session",problem:"unusable",cwd:u},{toolName:n});let t=d.arguments,c=et.get(n);if(!c)return l(n,t,{kind:x(n)},{configCwd:o,executionCwd:o},null);if(!t||typeof t!=="object"||Array.isArray(t))return H(o,{toolName:n});let p=t,a=p.command;if(typeof a!=="string"||a.trim()==="")return H(o,{toolName:n});let s=p.workdir;if(s!==void 0&&(typeof s!=="string"||s.trim()===""))return H(o,{command:a,toolName:n});let m=s===void 0?o:it([f(o,s)],r);if(!m)return me({directory:"requested",problem:"unusable",cwd:s},{command:a,toolName:n});return l(n,t,{kind:"command",shell:c},{configCwd:o,executionCwd:m},a)}
2
+ export{et,yt};
@@ -1,2 +1,2 @@
1
- import{Z,v,St,l}from"./index-qzcqzqbd.js";import{G,fe,Re}from"./index-n7t37q7p.js";var Qe=new Map([["bash","posix"],["powershell","powershell"]]),u={agent:"pi",debugLabel:"pi tool_call",extract:(o,e,r)=>p(o,e,r),getSessionId:(o,e)=>e.sessionManager.getSessionId(),allow:void 0,block:(o)=>C(o),includeEvidenceOnError:(o)=>o.route.kind==="command"};function ht(o){o.on("tool_call",s)}var s=m();function m(o={}){return Re(u,o)}function p(o,e,r){if(!o||typeof o!=="object")return;let n=o;if(n.type!==void 0&&n.type!=="tool_call")return;if(typeof n.toolName!=="string"||n.toolName.trim()==="")return i(e);if(typeof e.cwd!=="string"||e.cwd.trim()==="")return i(e,n.toolName);let t=St(".",[e.cwd],r);if(!t)return fe({directory:"session",problem:"unusable",cwd:e.cwd},{toolName:n.toolName});let a=Qe.get(n.toolName);if(!n.input||typeof n.input!=="object")return a?i(e,n.toolName):void 0;if(!a)return l(n.toolName,n.input,{kind:v(n.toolName)},{configCwd:t,executionCwd:t},null);let d=n.input.command;if(typeof d!=="string"||d.trim()==="")return i(e,n.toolName);return l(n.toolName,n.input,{kind:"command",shell:a},{configCwd:t,executionCwd:t},d)}function i(o,e){return G(typeof o.cwd==="string"&&o.cwd.trim()?o.cwd:null,{toolName:e})}function C(o){return{block:!0,reason:Z(o)}}
1
+ import{Z,x,St,l}from"./index-pzctbrv3.js";import{H,me,Te}from"./index-90bkfxht.js";var Qe=new Map([["bash","posix"],["powershell","powershell"]]),u={agent:"pi",debugLabel:"pi tool_call",extract:(o,e,r)=>p(o,e,r),getSessionId:(o,e)=>e.sessionManager.getSessionId(),allow:void 0,block:(o)=>C(o),includeEvidenceOnError:(o)=>o.route.kind==="command"};function ht(o){o.on("tool_call",s)}var s=m();function m(o={}){return Te(u,o)}function p(o,e,r){if(!o||typeof o!=="object")return;let n=o;if(n.type!==void 0&&n.type!=="tool_call")return;if(typeof n.toolName!=="string"||n.toolName.trim()==="")return i(e);if(typeof e.cwd!=="string"||e.cwd.trim()==="")return i(e,n.toolName);let t=St(".",[e.cwd],r);if(!t)return me({directory:"session",problem:"unusable",cwd:e.cwd},{toolName:n.toolName});let a=Qe.get(n.toolName);if(!n.input||typeof n.input!=="object")return a?i(e,n.toolName):void 0;if(!a)return l(n.toolName,n.input,{kind:x(n.toolName)},{configCwd:t,executionCwd:t},null);let d=n.input.command;if(typeof d!=="string"||d.trim()==="")return i(e,n.toolName);return l(n.toolName,n.input,{kind:"command",shell:a},{configCwd:t,executionCwd:t},d)}function i(o,e){return H(typeof o.cwd==="string"&&o.cwd.trim()?o.cwd:null,{toolName:e})}function C(o){return{block:!0,reason:Z(o)}}
2
2
  export{Qe,ht};
@@ -0,0 +1,2 @@
1
+ import{_e,L,P,bt,c,n,Ae,S,f}from"./index-pzctbrv3.js";import{Pe,B}from"./index-gkf3ty4y.js";function H(t,o={}){return{malformed:!0,denial:L(o),cwd:t}}function me(t,o){return{malformed:!0,denial:P(t,o),cwd:t.cwd}}function Te(t,o={}){return(e,i)=>{try{return m(e,i,t,o)}catch(a){return console.error("CC Safety Net error:",a),t.block(L())}}}function m(t,o,e,i){let a=c();if(e.cancelled?.(o))return e.block(L());let l=e.extract(t,o,a.paths);if(!l)return e.allow;let d=()=>e.getSessionId(t,o);if("malformed"in l)return Pe(a,l.denial,d,{agent:e.agent,toolName:l.denial.toolName,cwd:l.cwd}),e.block(l.denial);let u=(r,p)=>{let s=_e(r,{includeEvidence:p});return s?e.block(s):e.allow};try{let r=B(a,l,{guard:{auditAllowed:Ae(a.env),policyOptions:i.policyOptions,dependencies:i.guardDependencies},audit:{agent:e.agent,getSessionId:d}});return u(r,!0)}catch(r){if(!(r instanceof f))throw r;if(S(n.debug,a.env))console.error(`CC Safety Net debug: ${e.debugLabel} analysis failed: ${bt(r.cause)}`);return u(r.evaluation,e.includeEvidenceOnError(l))}}
2
+ export{H,me,Te};
@@ -1,4 +1,4 @@
1
- import{a,s,Y,m,Fe,u,Be,x,U,f,j}from"./index-qzcqzqbd.js";import{appendFileSync as re,mkdirSync as oe}from"node:fs";import{isAbsolute as ae,join as S}from"node:path";import{lstatSync as F,readdirSync as P,readFileSync as V,rmdirSync as B,statSync as D,unlinkSync as K,utimesSync as X,writeFileSync as z}from"node:fs";import{join as g}from"node:path";function ie(t,e={}){return Be(u(t,e),t.home).policy.audit.retention_days}var A=86400000,Z=".last-prune",Q=/^\d{4}-\d{2}$/,q=/^((\d{4}-\d{2})-\d{2})-.+\.jsonl$/,C=(t)=>Math.floor(t/A);function J(t,e,r=()=>new Date){try{let n=r().getTime();if(!D(e,{throwIfNoEntry:!1})?.isDirectory())return;let o=g(e,Z),c=D(o,{throwIfNoEntry:!1})?.mtimeMs;if(c!==void 0&&C(c)===C(n))return;let i=n-ie(t)*A,d=new Date(n).toISOString().slice(0,7);for(let l of v(e)){if(l.isDirectory()){ee(g(e,l.name),i,d);continue}if(l.isFile()&&l.name.endsWith(".jsonl"))te(g(e,l.name),i)}z(o,"",{mode:384}),X(o,n/1000,n/1000)}catch{}}function ee(t,e,r){for(let n of v(t)){if(!n.isDirectory()||!Q.test(n.name))continue;let o=g(t,n.name);for(let c of v(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`)+A;if(!Number.isFinite(d)||d>=e)continue;O(g(o,c.name))}if(n.name!==r)L(o)}L(t)}function te(t,e){try{let r=F(t);if(r.mtimeMs>=e)return;let n=V(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(F(t).mtimeMs!==r.mtimeMs)return;O(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 v(t){try{return P(t,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function O(t){try{K(t)}catch{}}function L(t){try{B(t)}catch{}}var ce="2.6.15",de=1e4,ue=2000,se=256,le=32768;function me(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 fe(t){return(t??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function I(t,e,r,n,o,c,i={}){let d=me(e);if(!d)return;let l=H(t);if(!l)return;try{let y=(i.now??(()=>new Date))().toISOString(),_=p(Y(r),i.failureStage?Number.POSITIVE_INFINITY:de),N=p(Y(n),ue),h=i.toolName?p(Y(i.toolName),se):void 0,E=c===null?void 0:p(Y(c),le),w=S(l,fe(E?.value??null),y.slice(0,7));oe(w,{recursive:!0,mode:448});let M=S(w,`${y.slice(0,10)}-${d}.jsonl`),R={ts:y,id:(i.createId??Fe)(),v:ce,sessionId:d,decision:i.decision??"deny",agent:i.agent,shape:i.shape,level:i.level,configFallback:i.configFallback,toolName:h?.value,command:_.value,segment:N.value,..._.truncated||N.truncated||h?.truncated||E?.truncated?{truncated:!0}:{},reason:o,ruleId:i.ruleId,intent:i.intent,failureStage:i.failureStage,errorCode:i.errorCode,cwd:E?.value??null};re(M,`${JSON.stringify(R)}
3
- `,{encoding:"utf-8",mode:384}),J(t,l,i.now)}catch{}}function p(t,e){return{value:t.slice(0,e),truncated:t.length>e}}function tt(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&&ae(r)?r:null}function H(t){let e=tt(t);return e?S(e,".cc-safety-net","logs"):null}function T(t,e,r,n=!0,o){if(e.decision.kind==="allow"){if(!r||t.route.kind!=="command")return;let d=G(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?G(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 G(t){return"command"in t?t.command??"":""}function b(t,e,r,n){if(!e)return;let o;try{o=r()}catch{return}if(typeof o!=="string"||!o.trim())return;I(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 Te(t,e,r,n){let o;try{o=r()}catch{return}if(typeof o!=="string"||!o.trim())return;I(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 W(t,e,r){try{let n=j(e,{environment:t,...r.guard});return k(t,e,n,r),n}catch(n){if(!(n instanceof f))throw n;throw k(t,e,n.evaluation,r,!(n.cause instanceof m),{stage:n.stage,errorCode:ge(n.cause)}),n}}function k(t,e,r,n,o=!0,c){b(t,T(r.promotedInvocation??e,r,n.guard?.auditAllowed??!1,o,c),n.audit.getSessionId,{agent:n.audit.agent,shape:n.audit.shape})}function ge(t){if(t instanceof s)return a[t.kind].errorCode;if(t instanceof m)return"tool-input-limit";if(t instanceof x)return"structural-shell-syntax-limit";if(t instanceof U)return"unparseable-command";return"unexpected-error"}
4
- export{ie,J,tt,H,Te,W};
1
+ import{a,s,Y,m,Fe,u,We,b,j,f,U}from"./index-pzctbrv3.js";import{appendFileSync as re,mkdirSync as oe}from"node:fs";import{isAbsolute as ae,join as S}from"node:path";import{lstatSync as F,readdirSync as P,readFileSync as V,rmdirSync as K,statSync as D,unlinkSync as X,utimesSync as z,writeFileSync as Z}from"node:fs";import{join as g}from"node:path";function ie(t,e={}){return We(u(t,e),t.home).policy.audit.retention_days}var A=86400000,Q=".last-prune",W=/^\d{4}-\d{2}$/,q=/^((\d{4}-\d{2})-\d{2})-.+\.jsonl$/,C=(t)=>Math.floor(t/A);function J(t,e,r=()=>new Date){try{let n=r().getTime();if(!D(e,{throwIfNoEntry:!1})?.isDirectory())return;let o=g(e,Q),c=D(o,{throwIfNoEntry:!1})?.mtimeMs;if(c!==void 0&&C(c)===C(n))return;let i=n-ie(t)*A,d=new Date(n).toISOString().slice(0,7);for(let l of v(e)){if(l.isDirectory()){ee(g(e,l.name),i,d);continue}if(l.isFile()&&l.name.endsWith(".jsonl"))te(g(e,l.name),i)}Z(o,"",{mode:384}),z(o,n/1000,n/1000)}catch{}}function ee(t,e,r){for(let n of v(t)){if(!n.isDirectory()||!W.test(n.name))continue;let o=g(t,n.name);for(let c of v(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`)+A;if(!Number.isFinite(d)||d>=e)continue;O(g(o,c.name))}if(n.name!==r)L(o)}L(t)}function te(t,e){try{let r=F(t);if(r.mtimeMs>=e)return;let n=V(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(F(t).mtimeMs!==r.mtimeMs)return;O(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 v(t){try{return P(t,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function O(t){try{X(t)}catch{}}function L(t){try{K(t)}catch{}}var ce="2.6.16",de=1e4,ue=2000,se=256,le=32768;function me(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 fe(t){return(t??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function I(t,e,r,n,o,c,i={}){let d=me(e);if(!d)return;let l=G(t);if(!l)return;try{let y=(i.now??(()=>new Date))().toISOString(),_=p(Y(r),i.failureStage?Number.POSITIVE_INFINITY:de),N=p(Y(n),ue),h=i.toolName?p(Y(i.toolName),se):void 0,E=c===null?void 0:p(Y(c),le),w=S(l,fe(E?.value??null),y.slice(0,7));oe(w,{recursive:!0,mode:448});let R=S(w,`${y.slice(0,10)}-${d}.jsonl`),H={ts:y,id:(i.createId??Fe)(),v:ce,sessionId:d,decision:i.decision??"deny",agent:i.agent,shape:i.shape,level:i.level,configFallback:i.configFallback,toolName:h?.value,command:_.value,segment:N.value,..._.truncated||N.truncated||h?.truncated||E?.truncated?{truncated:!0}:{},reason:o,ruleId:i.ruleId,intent:i.intent,failureStage:i.failureStage,errorCode:i.errorCode,cwd:E?.value??null};re(R,`${JSON.stringify(H)}
3
+ `,{encoding:"utf-8",mode:384}),J(t,l,i.now)}catch{}}function p(t,e){return{value:t.slice(0,e),truncated:t.length>e}}function tt(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&&ae(r)?r:null}function G(t){let e=tt(t);return e?S(e,".cc-safety-net","logs"):null}function k(t,e,r,n=!0,o){if(e.decision.kind==="allow"){if(!r||t.route.kind!=="command")return;let d=T(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?T(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 T(t){return"command"in t?t.command??"":""}function x(t,e,r,n){if(!e)return;let o;try{o=r()}catch{return}if(typeof o!=="string"||!o.trim())return;I(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 Pe(t,e,r,n){let o;try{o=r()}catch{return}if(typeof o!=="string"||!o.trim())return;I(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 B(t,e,r){try{let n=U(e,{environment:t,...r.guard});return M(t,e,n,r),n}catch(n){if(!(n instanceof f))throw n;throw M(t,e,n.evaluation,r,!(n.cause instanceof m),{stage:n.stage,errorCode:ge(n.cause)}),n}}function M(t,e,r,n,o=!0,c){x(t,k(r.promotedInvocation??e,r,n.guard?.auditAllowed??!1,o,c),n.audit.getSessionId,{agent:n.audit.agent,shape:n.audit.shape})}function ge(t){if(t instanceof s)return a[t.kind].errorCode;if(t instanceof m)return"tool-input-limit";if(t instanceof b)return"structural-shell-syntax-limit";if(t instanceof j)return"unparseable-command";return"unexpected-error"}
4
+ export{ie,J,tt,G,Pe,B};