cc-safety-net 2.4.2 → 2.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/amp/cc-safety-net/index.ts +2 -2
- package/dist/api.js +1 -1
- package/dist/bin/hook.js +1 -1
- package/dist/chunks/index-26getn55.js +45 -0
- package/dist/chunks/{index-409cdnva.js → index-p4h81vth.js} +2 -2
- package/dist/chunks/{index-jfmgn339.js → index-sp43p448.js} +4 -4
- package/dist/cli.js +113 -113
- package/dist/index.d.ts +5 -0
- package/dist/index.js +11 -1
- package/dist/openclaw/cc-safety-net/index.js +2 -2
- package/dist/openclaw/cc-safety-net/openclaw.plugin.json +1 -1
- package/dist/openclaw/cc-safety-net/package.json +1 -1
- package/dist/opencode-v2.d.ts +3 -0
- package/dist/pi/index.js +2 -2
- package/package.json +16 -4
- package/dist/chunks/index-pmd634p1.js +0 -45
package/README.md
CHANGED
|
@@ -87,6 +87,8 @@ npx -y cc-safety-net@latest update
|
|
|
87
87
|
|
|
88
88
|
Keep the `@latest` qualifier. A bare `cc-safety-net` spec can run an older copy from the npx cache. To uninstall, run `npx -y cc-safety-net uninstall`. `npm install -g cc-safety-net` also installs the `ccsn` alias.
|
|
89
89
|
|
|
90
|
+
OpenCode integration supports v1.18.29+ and v2.0.6+. Run `npx -y cc-safety-net@latest install --opencode`; the installer selects the host's plugin commands. See [OpenCode compatibility](docs/opencode-compatibility.md) for v2 shell configuration and host limitations.
|
|
91
|
+
|
|
90
92
|
## Safety presets
|
|
91
93
|
|
|
92
94
|
To set a preset, run `npx cc-safety-net gui` and open Policy.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// cc-safety-net managed Amp plugin. Do not edit. Reinstall with: npx -y cc-safety-net install --amp
|
|
2
|
-
// version: 2.4.
|
|
2
|
+
// version: 2.4.3
|
|
3
3
|
// @bun
|
|
4
4
|
var mi="CC Safety Net could not analyze the command because it exceeds safe analysis limits. Simplify or split the command and retry.",$e="Command exceeds maximum recursion depth and cannot be safely analyzed. Flatten the nesting and retry.",Rn="CC Safety Net failed closed because command analysis failed unexpectedly. This is not caused by your command. Report it to the user.";var di={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."},En={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,...di},processedCandidateBytes:{cap:4194304,...di},pathEnvironmentExpansion:{cap:64,...di},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,...En},trackedHeredocFiles:{cap:64,...En},controlFlowStates:{cap:64,...En},wrapperPeelIterations:{cap:20,...En},derivedCommandShape:En});class D extends Error{kind;name="AnalysisLimit";constructor(e){super(V[e].reason);this.kind=e}}function ye(){let e=new Map;return{counters:e,resolvedPaths:new Map,charge(t,n=1){let r=(e.get(t)??0)+n;if(e.set(t,r),r>V[t].cap)throw new D(t)}}}var sp=[/\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 at(e){return ap(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 ap(e){return sp.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 lp={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 cp(e){let t=e.maxLen??200,n=e.redact??((o)=>o),r=(o)=>o.length>t?`${o.slice(0,t)}...`:o;return["BLOCKED by CC Safety Net",`Reason: ${n(e.reason)}`,e.ruleId?`Rule: ${e.ruleId}`:void 0,e.toolName?`Tool: ${e.toolName}`:void 0,e.command?`Command: ${r(n(e.command))}`:void 0,e.segment&&e.segment!==e.command?`Segment: ${r(n(e.segment))}`:void 0,e.configWarning?`Config warning: ${n(e.configWarning)}`:void 0,lp[e.intent??"manual_only"]].filter((o)=>o!==void 0).join(`
|
|
5
5
|
|
|
@@ -45,5 +45,5 @@ var mi="CC Safety Net could not analyze the command because it exceeds safe anal
|
|
|
45
45
|
`).replace(/\\t/g,"\t").replace(/\\r/g,"\r")}function S_(e,t,n,r,o,i){let s=St(e);if(s.length===0||st(s[0]??"").toLowerCase()!=="xargs")return!1;let a=Bt(s),l=s.slice(a.childStart);if(l.length===0)return!1;if(a.replacementToken==="")return!1;let c=a.replacementToken,m=c===null?[...l,Ga]:l.map((d)=>d.split(c).join(Ga));return si(m,t,n,r,o,i).some((d)=>d.target.includes(Ga))}function v_(e){let t=St(e);if(t.length===0)return null;let n=st(t[0]??"").toLowerCase();if(!Qn(n))return null;return E_(n,t.slice(1))?n:null}function E_(e,t){let n=Ha(e);for(let r=0;r<t.length;r++){let o=t[r];if(o===void 0)break;if(Lf.has(o)||zf(e,o)||/^--(?:eval|exec)=/.test(o))return!1;if(o==="-")return!0;if(o.startsWith("-")){if(n==="python"&&o==="-m")return!1;if(d_.get(n)?.has(o))r++;continue}return!1}return!0}function Ha(e){return/^python\d/.test(e)?"python":e}function R_(e){let t=[];for(let n of e){if($f(n))continue;let r=/^[A-Za-z_][A-Za-z0-9_]*=(.*)$/.exec(n);if(r===null)break;if(r[1]!==void 0&&r[1]!=="")t.push(r[1])}return t}var Tf=/^(?:\$\{home\}|\$\{env:(?:userprofile|home)\}|~)(?=[\\/])/i;function x_(e,t){if(!t||!Tf.test(e))return e;return`~${e.replace(Tf,"").replace(/\\/g,"/")}`}function it(e,t){if(t==="--")return[];let n=[],r=t.indexOf("=");if(r>0&&r<t.length-1)n.push(t.slice(r+1));if(t.startsWith("-"))return n;if(e==="tar"&&/\.(?:tar|tgz|tar\.gz|zip)$/i.test(t))return n;if(e==="zip"&&/\.zip$/i.test(t))return n;return n.push(t),n}function __(e){let t=-1,n=!1;for(let r=0;r<e.length;r++){let o=e[r]??"";if(!n&&o==="--"){n=!0;continue}if(n||!/^-(?:[A-Za-z]|-)/.test(o)){if(t===-1)t=r;continue}if(/^--(?:arg|argjson|argfile|rawfile|slurpfile)$/.test(o)){r+=2;continue}if(o==="--indent"||o==="-L"){r++;continue}if(o.startsWith("-L"))continue;if(/^-[srjcCMaSRnbehV]+$/.test(o)||/^--(?:slurp|raw-output0?|join-output|compact-output|color-output|monochrome-output|ascii-output|unbuffered|sort-keys|raw-input|null-input|binary|tab|seq|stream|stream-errors|exit-status|args|jsonargs|help|version|build-configuration)$/.test(o))continue;return e.flatMap((i)=>it("jq",i))}return e.flatMap((r,o)=>o===t?[]:it("jq",r))}function w_(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n]??"";if(r==="--"||!r.startsWith("-"))return[...t,...e.slice(n).flatMap((i)=>it("git",i))];if(t.push(...it("git",r)),!Ce.has(r))continue;let o=e[n+1];if(o===void 0)break;t.push(...r==="-c"&&o.includes("=")?[o.slice(o.indexOf("=")+1)]:it("git",o)),n++}return t}function P_(e){return e.flatMap((t,n)=>{let r=T_(t);if(r!==null)return If(r.flag,r.value);let o=A_(e[n-1]);return o===null?[]:If(o,t)})}function If(e,t){if(e==="-F"||e==="--form"){let n=t.indexOf("="),r=n===-1?t:t.slice(n+1);if(!r.startsWith("@")&&!r.startsWith("<"))return[];return za(r.slice(1).split(";")[0]??"")}if(e==="--data-urlencode"){let n=t.indexOf("@"),r=t.indexOf("=");if(n===-1||r!==-1&&r<n)return[];return za(t.slice(n+1))}return t.startsWith("@")?za(t.slice(1)):[]}function A_(e){if(e===void 0)return null;if(Nf.has(e))return e;return/^-[A-Za-z]+[dF]$/.test(e)?`-${e.slice(-1)}`:null}function T_(e){let t=e.slice(0,2);if(e.length>2&&(t==="-d"||t==="-F"))return{flag:t,value:e.slice(2)};let n=e.indexOf("=");if(n===-1)return null;let r=e.slice(0,n);return Nf.has(r)?{flag:r,value:e.slice(n+1)}:null}function za(e){return e===""||e==="-"?[]:[e]}function I_(e,t,n,r,o,i){let s=e.findIndex((l)=>l.startsWith("-")||l==="("||l==="!"||l===";"),a=[...e.slice(0,s===-1?e.length:s)];for(let l=0;l<e.length;l++){if(!jx.has(e[l]??""))continue;let c=e.slice(l+1),m=c.findIndex((f)=>Vx.has(f)),d=m===-1?c:c.slice(0,m),u=si(d,t,n,r,o,i).map((f)=>f.target);if(a.push(...u.filter((f)=>f!=="{}")),!u.includes("{}"))continue;a.push(...e.slice(0,l).flatMap((f,p,h)=>{if(!qx.has(f))return[];let g=h[p+1];return g===void 0?[]:[g,g.replace(/^\*+\//,"").replace(/\/\*+$/g,"").replace(/^\*+/,"").replace(/\*+$/g,"")]}))}return a}function k_(e,t,n,r,o,i,s){let a=[];for(let l=0;l<t.length;l++){let c=t[l];if(c===void 0)break;if(Lf.has(c)||zf(e,c)){let d=t[l+1];if(d!==void 0)a.push(...oi(e,d,n,r,o,i,s)),l++;continue}let m=/^--(?:eval|exec)=(.*)$/.exec(c);if(m!==null&&m[1]!==void 0){a.push(...oi(e,m[1],n,r,o,i,s));continue}if(!c.startsWith("-"))a.push({target:c,cwd:i})}return a}function zf(e,t){if(!t.startsWith("-")||t.startsWith("--")||t.length<=2)return!1;return Xx.get(t[t.length-1]??"")?.has(Ha(e))??!1}function O_(e,t,n,r,o,i){if(!e.includes("system"))return[];return ra(e)?.commands.flatMap((s)=>vn(t.getShellSyntax(s),t,n,r,o,i))??[]}function M_(e){return Array.from(e.matchAll(/\bgetline(?:\s+[A-Za-z_][A-Za-z0-9_]*)?\s*<\s*"((?:\\.|[^"\\])*)"/g)).map((t)=>t[1]).filter((t)=>t!==void 0&&t!=="")}function D_(e){let t=Array.from(e.matchAll(/(['"`])((?:\\.|(?!\1).)*)\1/g)).map((n)=>n[2]).filter((n)=>n!==void 0&&n!=="");return[...t,...t.flatMap(ja),...e.match(Ba)??[]]}function oi(e,t,n,r,o,i,s){let a=(f)=>({target:f,cwd:i}),l=L_(t,N_(e));if(l===null)return D_(t).map(a);let c=l.masked.match(a_)!==null||l.literals.some((f)=>l_.test(l.masked.slice(0,f.start))),m=l.masked.match(c_)!==null||l.literals.some((f)=>u_.test(l.masked.slice(0,f.start))),d=r.refineInlineData===!0&&!Xn.has(e),u=d&&!(z_(l.masked)||c||m)?[]:l.literals;return[...u.map((f)=>f.text).filter((f)=>f!=="").map(a),...u.flatMap((f)=>ja(f.text)).map(a),...d?[]:l.literals.flatMap((f)=>f.text.match(Ba)??[]).map(a),...c?l.literals.flatMap((f)=>$a(f.text,n,r,o,i,s)??[a(f.text)]):[],...m?l.literals.flatMap((f)=>oi(e,f.text.replace(/\\(.)/g,(p,h)=>h==="n"?`
|
|
46
46
|
`:h),n,r,o,i,s)):[],...(l.masked.match(Ba)??[]).map(a)]}function N_(e){let t=Ha(e);if(t==="python")return"python";if(t==="osascript")return"opaque";return t==="node"||t==="bun"||t==="deno"?"javascript":"simple"}function L_(e,t){if(t==="opaque")return null;let n=e.split(""),r=[];for(let o=0;o<e.length;o++){let i=e[o]??"";if(t==="simple"&&(i==="`"||i==="%"||i==="<")){if(i_.test(e.slice(o)))return null}let s=i==="'"||i==='"'||t==="javascript"&&i==="`"?i:null;if(s===null)continue;if(s==="`"&&G_(e,o))return null;let a=t==="python"?W_(e,o):"",l=t==="python"&&e.startsWith(s.repeat(3),o)?s.repeat(3):s,c=o+l.length,m=F_(e,c,l);if(m===null)return null;let d=e.slice(c,m);if(/[fF]/.test(a)&&d.includes("{"))return null;if(t==="simple"&&s==='"'&&s_.test(d))return null;r.push({start:c,text:d});for(let u=o;u<m+l.length;u++)n[u]=" ";o=m+l.length-1}return{masked:n.join(""),literals:r}}function W_(e,t){return o_.exec(e.slice(Math.max(0,t-3),t))?.[1]??""}function F_(e,t,n){let r=n==="`",o=r||n.length===3;for(let i=t;i<e.length;i++){let s=e[i];if(s==="\\"){i++;continue}if(r&&s==="$"&&e[i+1]==="{")return null;if(!o&&(s===`
|
|
47
47
|
`||s==="\r"))return null;if(e.startsWith(n,i))return i}return null}function G_(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 z_(e){for(let t of e.matchAll(/[A-Za-z_$][A-Za-z0-9_$]*/g)){let n=t[0],r=t.index;if(Yx.has(n.toLowerCase()))return!0;let o=n.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_$\s]+/).map((i)=>i.toLowerCase());if(!o.some((i)=>Zx.has(i)))continue;if(o.length>1)return!0;if(B_(e,r)===".")return!0;if($_(e,r+n.length)==="(")return!0}return!1}function B_(e,t){for(let n=t-1;n>=0;n--)if(!/\s/.test(e[n]??""))return e[n];return}function $_(e,t){for(let n=t;n<e.length;n++)if(!/\s/.test(e[n]??""))return e[n];return}function U_(e,t,n,r,o,i){return q_(e).flatMap((s)=>{let a=t.getShellSyntax(s);if(a.status==="invalid")return[];return[...vn(a,t,{...n,capturedOutput:!0},r,o,i),...H_(a,r)?j_(a,r).map((l)=>({target:l,cwd:o})):[]]})}function H_(e,t){let n=So(e);for(let r=0;r<n.length;r++){let o=n[r];if(o?.kind!=="word"||st(Je(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=Je(s.text,t);if(a==="--decode"||!a.startsWith("--")&&a.startsWith("-")&&/[dD]/.test(a))return!0}}return!1}function j_(e,t){return So(e).flatMap((n)=>n.kind==="word"?[Je(n.text,t)]:n.kind==="redirection"&&n.target?[Je(n.target,t)]:[]).flatMap(ja)}function ja(e){let t=K_(e);if(t===null)return[];let n=Buffer.from(t,"base64").toString("utf8");if(n===""||V_(n))return[];return Buffer.from(n,"utf8").toString("base64").replace(/=+$/g,"")===t.replace(/=+$/g,"")?[n]:[]}function V_(e){return Array.from(e).some((t)=>{let n=t.charCodeAt(0);return n<32||n===127})}function K_(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 q_(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(Dn(o,n))continue;if(Bf(e,r,n)){let i=Y_(e,r+1);if(i!==null)t.push(i.body),r=i.endIndex;continue}if(!n.inSingle&&o==="`"){let i=Z_(e,r);if(i!==null)t.push(i.body),r=i.endIndex}}return t}function Y_(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(Dn(i,n))continue;if(Bf(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 Z_(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 Bf(e,t,n){return!n.inSingle&&e[t]==="$"&&e[t+1]==="("&&e[t+2]!=="("}function X_(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 m=/^--([^=]+)(?:=(.*))?$/.exec(c);if(m!==null){let d=m[1]??"",u=m[2];if(d===Qx)o=!0;if(t_.has(d))r=!0;if(u!==void 0){if(d===wf)t.push(u);continue}if(r_.has(d)){let f=e[l+1];if(d===wf&&f!==void 0)t.push(f);l++}continue}if(c.startsWith("-")&&c.length>1){let d=c.slice(1),u="",f="";for(let h=0;h<d.length;h++){let g=d[h]??"";if(e_.has(g))r=!0;if(n_.has(g)){u=g,f=d.slice(h+1);break}}if(u==="")continue;if(f.length>0){if(u===_f)t.push(f);continue}let p=e[l+1];if(u===_f&&p!==void 0)t.push(p);l++;continue}n.push(c)}let a=!r&&!o?n.slice(1):n;return[...t,...a]}function St(e){let t=e.findIndex((n)=>!$f(n)&&!/^[A-Za-z_][A-Za-z0-9_]*=.*/.test(n));return t===-1?[]:[...e.slice(t)]}function $f(e){return e==="env"||e==="command"||e==="builtin"||e==="sudo"}var J_=new Set(["id_rsa.pub","id_ed25519.pub","id_ecdsa.pub"]),Q_=".env.",ew=new Set([".env.example",".env.sample",".env.template",".env.defaults"]),tw=[".env.example.",".env.sample."];function nw(e){let t;try{t=new URL(e.trim())}catch{return!1}return t.protocol!=="file:"&&t.host!==""}function rw(e){return e.length>0&&!/\s/.test(e)}function ow(e,t,n,r){try{let o=br(e,t,n,r);return o!==""&&n.paths.entryKind(o)!=="missing"}catch(o){if(o instanceof D)throw o;return!1}}var iw=new Set(["node_modules","__pycache__"]),sw=[["vendor","bundle"],["vendor","cache"]];function aw(e,t,n,r,o){if(nw(e))return null;let i=He(e,t,r,o);if(!i)return null;let s=B(i.split("/").pop()??""),a=B(i),l=()=>rw(s)||ow(e,t,r,o);if(ew.has(s)||tw.some((u)=>s.startsWith(u)))return null;let c=B(fw(e,t,r,o));for(let u of ts){let f=`~/${u.suffixParts.join("/")}`;if((Of(a,f)||Of(c,f))&&ot(u.id,n))return u.id}let m=lw(i,t,n,r,o);if(m)return m;if(J_.has(s))return null;for(let u of es)if(s===u.basename&&ot(u.id,n))return u.id;if(s.startsWith(Q_)&&ot(Fr.id,n)&&l())return Fr.id;for(let u of ns)if(s.length>u.prefix.length&&s.startsWith(u.prefix)){let f=s.slice(u.prefix.length)[0];if((f==="-"||f==="_")&&ot(u.id,n)&&l())return u.id}for(let u of rs)if(s.length>u.prefix.length&&s.startsWith(u.prefix)){if(s.slice(u.prefix.length)===u.suffix&&ot(u.id,n))return u.id}if(dw(a))return null;if(!s.includes(".")&&Nn.pattern.test(s)&&ot(Nn.id,n))return Nn.id;let d=mw(s,n);if(d)return d;return null}function lw(e,t,n,r,o){return Gr.find((i)=>{if(!ot(i.id,n))return!1;switch(i.id){case"secret.cli.claude-code":return W(e,z(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),[".credentials.json"]);case"secret.cli.claude-code.config":{let s=B(e).split("/");return W(e,z(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),["settings.json","settings.local.json"])||yr(e,"~/.claude.json",t,r,o)||s.at(-1)==="settings.local.json"&&s.at(-2)===".claude"||s.at(-1)===".mcp.json"}case"secret.cli.antigravity":return W(e,He("~/.gemini/config",t,r,o),["hooks.json","mcp_config.json"]);case"secret.cli.codex":{let s=z(r.env.get("CODEX_HOME"),"~/.codex",t,r,o);return W(e,s,["auth.json",".credentials.json"])||hr(e,s,["secrets",".sandbox-secrets"])}case"secret.cli.codex.config":{let s=z(r.env.get("CODEX_HOME"),"~/.codex",t,r,o),a=B(e).split("/").at(-1)??"";return W(e,s,["config.toml"])||a.endsWith(".config.toml")&&W(e,s,[a])}case"secret.cli.gemini":return W(e,ae(z(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=B(e).split("/"),a=r.env.get("GEMINI_CLI_SYSTEM_SETTINGS_PATH"),l=r.env.get("ProgramData")?[ae(z(r.env.get("ProgramData"),"",t,r,o),"gemini-cli")]:[];return W(e,ae(z(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()?yr(e,a,t,r,o):!1)||["/Library/Application Support/GeminiCli","/etc/gemini-cli",...l].some((c)=>W(e,He(c,t,r,o),["settings.json"]))}case"secret.cli.copilot-cli":{let s=z(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o);return W(e,s,["config.json"])||hr(e,s,["mcp-oauth-config","mcp-secrets"])}case"secret.cli.copilot-cli.config":return W(e,z(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o),["mcp-config.json"]);case"secret.cli.kimi-code":{let s=z(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),a=z(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o);return W(e,s,["server.token"])||hr(e,s,["credentials"])||hr(e,a,["credentials","mcp-oauth"])}case"secret.cli.kimi-code.config":{let s=["config.toml","mcp.json"],a=B(e).split("/");return a.at(-1)==="mcp.json"&&a.at(-2)===".kimi-code"||W(e,z(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),s)||W(e,z(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o),[...s,"config.json","config.json.bak"])}case"secret.cli.opencode":{let s=ae(z(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),"opencode"),a=B(e).split("/").at(-1)??"",l=r.env.get("OPENCODE_DB")?.trim(),c=l&&l!==":memory:"?[l,`${l}-wal`,`${l}-shm`]:[];return W(e,s,["auth.json","mcp-auth.json"])||/^opencode(-.+)?\.db(-wal|-shm)?$/.test(a)&&W(e,s,[a])||c.some((m)=>yr(e,m,t,r,o))}case"secret.cli.opencode.config":{let s=r.env.get("OPENCODE_CONFIG_DIR")?z(r.env.get("OPENCODE_CONFIG_DIR"),"~/.config/opencode",t,r,o):ae(z(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"opencode"),a=r.env.get("ProgramData")?[ae(z(r.env.get("ProgramData"),"",t,r,o),"opencode")]:[],l=["opencode.json","opencode.jsonc"],c=r.env.get("OPENCODE_CONFIG");return l.includes(B(e).split("/").at(-1)??"")||W(e,s,l)||(c?.trim()?yr(e,c,t,r,o):!1)||["/Library/Application Support/opencode","/etc/opencode",...a].some((m)=>W(e,He(m,t,r,o),l))}case"secret.cli.pi":return W(e,z(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["auth.json"]);case"secret.cli.pi.config":return W(e,z(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["models.json"]);case"secret.cli.amp":{let s=He("~",t,r,o);return[ae(z(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),"amp"),ae(s,".local","share","amp")].some((l)=>W(e,l,["secrets.json"]))||hr(e,ae(s,".amp"),["oauth"])}case"secret.cli.amp.config":{let s=["settings.json","settings.jsonc"],a=[ae(z(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"amp"),ae(He("~",t,r,o),".config","amp")],l=B(e).split("/"),c=r.env.get("AMP_SETTINGS_FILE");return a.some((m)=>W(e,m,s))||l.at(-2)===".amp"&&s.includes(l.at(-1)??"")||(c?.trim()?yr(e,c,t,r,o):!1)}case"secret.cli.cursor":{let s=ae(z(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"cursor"),a=ae(z(r.env.get("CURSOR_DATA_DIR"),"~/.cursor",t,r,o),"projects");return W(e,He("~/.cursor",t,r,o),["auth.json"])||W(e,s,["auth.json"])||B(e).split("/").at(-1)==="mcp-auth.json"&&Ht(B(e),B(a))}case"secret.cli.cursor.config":{let s=B(e).split("/");return s.at(-1)==="mcp.json"&&s.at(-2)===".cursor"}case"secret.cli.grok-build":return W(e,z(r.env.get("GROK_HOME"),"~/.grok",t,r,o),["auth.json","mcp_credentials.json"]);case"secret.cli.grok-build.config":{let s=B(e).split("/");return s.at(-1)==="config.toml"&&s.at(-2)===".grok"||W(e,z(r.env.get("GROK_HOME"),"~/.grok",t,r,o),["config.toml","managed_config.toml","requirements.toml"])||W(e,He("/etc/grok",t,r,o),["managed_config.toml","requirements.toml"])}default:return!1}})?.id??null}var kf=new WeakMap;function z(e,t,n,r,o){let i=kf.get(o)??new Map;kf.set(o,i);let s=`${n}\x00${e??""}\x00${t}`,a=i.get(s);if(a!==void 0)return a;let l=He(e?.trim()?e:t,n,r,o);return i.set(s,l),l}function W(e,t,n){return n.some((r)=>Uf(e,ae(t,r)))}function hr(e,t,n){return n.some((r)=>Ht(B(e),B(ae(t,r))))}function yr(e,t,n,r,o){return Uf(e,He(t,n,r,o))}function Uf(e,t){return B(e)===B(t)}function ae(e,...t){return Be([e,...t].filter(Boolean).join("/"))}function cw(e,t,n,r,o,i){if(n.length===0)return!1;let s=B(br(e,t,o,i));return n.some((a)=>Ht(s,B(br(a,r,o,i))))}function uw(e,t,n,r,o,i){if(n.length===0)return!1;let s=B(br(e,t,o,i));if(!s)return!1;let a=o.env.get("HOME")??o.home,l=a?Be(G(be(a),o.paths,i)):"",c=B(l),m=o.env.get("CC_SAFETY_NET_HOME"),d=B(m?Be(G(ii(be(m)),o.paths,i)):l&&Be(G(`${l}/.cc-safety-net`,o.paths,i)));if(d&&Ht(s,d))return!1;return n.some((u)=>{let f=B(br(u,r,o,i));if(!f)return!1;if(c&&(c===f||c.startsWith(f.endsWith("/")?f:`${f}/`)))return!1;return Ht(s,f)})}function dw(e){let t=e.split("/");return t.some((n)=>iw.has(n))||sw.some(([n,r])=>t.some((o,i)=>o===n&&t[i+1]===r))}function mw(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 os)if(r===o.extension&&ot(o.id,t))return o.id;for(let o of is)if(o.pattern.test(r)&&ot(o.id,t))return o.id;return null}function B(e){return e.toLowerCase()}function ot(e,t){return!t?.disabledRules?.includes(e)}function He(e,t,n,r){let{home:o,normalized:i}=Va(e,n,r);if(!i)return"";if(!o)return i;let s=Ka(i,o),a=ri(s)?s:Be(ii(t,s)),l=Be(G(a,n.paths,r));if(!Ht(l,o)){if(ri(s))return l;return l===a?i:l}let c=l.slice(o.length);return c?`~${c}`:"~"}function Of(e,t){return e===t||e.startsWith(`${t}/`)}function fw(e,t,n,r){let{home:o,normalized:i}=Va(e,n,r);if(!i||!o)return"";let s=Ka(i,o),a=Bx.normalize(ri(s)?s:Be(ii(t,s))),l=Be(be(n.env.get("HOME")??n.home)),c=(u)=>process.platform==="win32"?u.toLowerCase():u,m=[o,l].find((u)=>u!==""&&Ht(c(a),c(u)));if(m===void 0)return"";let d=a.slice(m.length);return d?`~${d}`:"~"}function br(e,t,n,r){let{home:o,normalized:i}=Va(e,n,r);if(!i)return"";let s=o?Ka(i,o):i;return Be(G(ri(s)?s:ii(t,s),n.paths,r))}function Va(e,t,n){let r=t.env.get("HOME")??t.home,o=r?Be(G(be(r),t.paths,n)):"",i=Be(be(pw(Je(e,t))));return{home:o,normalized:i}}function pw(e){if(!e.trim().toLowerCase().startsWith("file:"))return e;try{return Ux(e)}catch{return e}}function Ka(e,t){if(e==="~")return t;if(e.startsWith("~/"))return ae(t,e.slice(2));return e}function gw(e){if(process.platform==="win32")return!0;return $x.parse(e).root.length>1}function Be(e){let t=e.trim(),n=(t.includes("\\")&&gw(t)?t.replace(/\\/g,"/"):t).replace(/\/{2,}/g,"/").replace(/^\.\//,"");if(n==="/")return n;return n.replace(/\/+$/g,"")}function Ht(e,t){return e===t||e.startsWith(t.endsWith("/")?t:`${t}/`)}function st(e){return e.split(/[\\/]/).pop()?.replace(/\.exe$/i,"")??e}class jt 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 hw={findPolicyMutation:Ef,findGitMetadataMutation:od,resolveGitMetadata:yw,loadPolicySnapshot:jc,findSensitiveTarget:Wf,analyzeCommand:ff,getModes:Ti};function Hf(e,t){let n={...hw,...t.dependencies},r=Sw(e),o=Cr(e)?e.command:r,i=vt("policy-protection",o,()=>er(e)),s=pe(i,"input-candidate"),a=pe(i,"declared-command");if(Cr(e)&&e.command?.trim()&&a?.program.status==="limited")return{stage:"command-analysis",decision:{kind:"deny",reason:$e,intent:"stop_and_explain",evidence:{command:e.command,segment:e.command}}};if(s?.program.status==="limited")return{stage:"command-validation",decision:{kind:"deny",reason:xd,intent:"stop_and_explain"}};let l=ye(),c=vt("policy-protection",o,()=>n.resolveGitMetadata([e.context.executionCwd,e.context.configCwd],t.environment)),m=vt("policy-protection",o,()=>n.findPolicyMutation(i,t.environment,l));if(m){let E=o??m.target;return{stage:"policy-protection",decision:{kind:"deny",reason:vf,intent:"hard_stop",evidence:{command:E,segment:m.target}}}}let d=vt("policy-protection",o,()=>yf(i,t.environment,l));if(d){let E=o??d.target;return{stage:"policy-protection",decision:{kind:"deny",reason:hf,intent:"hard_stop",evidence:{command:E,segment:d.target}}}}let u=vt("policy-protection",o,()=>n.findGitMetadataMutation(i,c,t.environment,l));if(u){let E=o??u.target;return{stage:"policy-protection",decision:{kind:"deny",reason:Pe,intent:"hard_stop",evidence:{command:E,segment:u.target}}}}let f=vt("config-load",o,()=>n.loadPolicySnapshot(t.environment,{...t.policyOptions,cwd:e.context.configCwd})),p=f.policy,h=n.getModes(p,t.environment.env),g={level:h.effectiveLevel,...bw(f)},y=p.secretProtection.enabled===!1?null:vt("secret-protection",o,()=>n.findSensitiveTarget(i,p.secretProtection,t.environment,l,{strict:Cr(e)||s?.program.dialect==="powershell"?h.strict:void 0}));if(y){let E=o??y.target;return{stage:"secret-protection",...g,decision:{kind:"deny",reason:Mf,intent:"hard_stop",ruleId:y.ruleId,evidence:{command:E,segment:y.target}}}}if(!Cr(e))return{stage:"non-command",...g,decision:{kind:"allow"}};if(!e.command||e.command.trim()==="")return{...qa("command-validation",o),...g};let v=vt("command-analysis",o,()=>pf(()=>n.analyzeCommand(e.command,{cwd:e.context.executionCwd,shell:e.route.shell,policySnapshot:f,environment:t.environment,protectedGitMetadata:c,effectiveCapabilities:h.capabilities,strict:h.strict,paranoidRm:h.paranoidRm,paranoidInterpreters:h.paranoidInterpreters,worktreeMode:h.worktreeMode,budget:l,...t.trace?{trace:t.trace}:{}},Cw(i),i.store),e.command,t.trace));if(v.decision)return{stage:"command-analysis",...g,..."errorCode"in v?{errorCode:v.errorCode}:{},decision:v.decision};return{stage:"command-analysis",...g,decision:{kind:"allow"}}}function yw(e,t){let n=[...new Set(e.filter((r)=>typeof r==="string"&&r!==""))].flatMap((r)=>t.gitMetadata(r)??[]);if(n.length===0)return null;return Object.freeze({entries:Object.freeze([...new Set(n.flatMap((r)=>r.entries))]),markerFiles:Object.freeze([...new Set(n.flatMap((r)=>r.markerFiles))]),directories:Object.freeze([...new Set(n.flatMap((r)=>r.directories))]),hooksDirectories:Object.freeze([...new Set(n.flatMap((r)=>r.hooksDirectories))])})}function bw(e){if(e.state==="ready")return{};return{configFallback:{reason:e.reason}}}function Cw(e){return pe(e,"declared-command")?.program}function Sw(e){try{return Pn(e.input)}catch(t){let n=Cr(e)?e.command:void 0;throw new jt("policy-protection",qa("policy-protection",t instanceof Ve?void 0:n,t),t)}}function vt(e,t,n){try{return n()}catch(r){throw new jt(e,qa(e,r instanceof Ve?void 0:t,r),r)}}function qa(e,t,n){let r=n instanceof D||n instanceof Le;return{stage:e,decision:{kind:"deny",reason:r?mi:Rn,intent:"stop_and_explain",...t?{evidence:{command:t,segment:t}}:{}}}}function Cr(e){return e.route.kind==="command"}import{appendFileSync as Mw,mkdirSync as Dw}from"fs";import{isAbsolute as Nw,join as Xa}from"path";import{lstatSync as Vf,readdirSync as vw,readFileSync as Ew,rmdirSync as Rw,statSync as Kf,unlinkSync as xw,utimesSync as _w,writeFileSync as ww}from"fs";import{join as Sr}from"path";function jf(e,t={}){return Kr(Qt(e,t),e.home).policy.audit.retention_days}var Za=86400000,Pw=".last-prune",Aw=/^\d{4}-\d{2}$/,Tw=/^((\d{4}-\d{2})-\d{2})-.+\.jsonl$/,qf=(e)=>Math.floor(e/Za);function Zf(e,t,n=()=>new Date){try{let r=n().getTime();if(!Kf(t,{throwIfNoEntry:!1})?.isDirectory())return;let o=Sr(t,Pw),i=Kf(o,{throwIfNoEntry:!1})?.mtimeMs;if(i!==void 0&&qf(i)===qf(r))return;let s=r-jf(e)*Za,a=new Date(r).toISOString().slice(0,7);for(let l of Ya(t)){if(l.isDirectory()){Iw(Sr(t,l.name),s,a);continue}if(l.isFile()&&l.name.endsWith(".jsonl"))kw(Sr(t,l.name),s)}ww(o,"",{mode:384}),_w(o,r/1000,r/1000)}catch{}}function Iw(e,t,n){for(let r of Ya(e)){if(!r.isDirectory()||!Aw.test(r.name))continue;let o=Sr(e,r.name);for(let i of Ya(o)){if(!i.isFile())continue;let s=Tw.exec(i.name);if(!s||s[2]!==r.name)continue;let a=Date.parse(`${s[1]}T00:00:00.000Z`)+Za;if(!Number.isFinite(a)||a>=t)continue;Xf(Sr(o,i.name))}if(r.name!==n)Yf(o)}Yf(e)}function kw(e,t){try{let n=Vf(e);if(n.mtimeMs>=t)return;let r=Ew(e,"utf-8").split(`
|
|
48
|
-
`).filter((o)=>o.trim()).map(Ow);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(Vf(e).mtimeMs!==n.mtimeMs)return;Xf(e)}catch{}}function Ow(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 Ya(e){try{return vw(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Xf(e){try{xw(e)}catch{}}function Yf(e){try{Rw(e)}catch{}}var Lw="2.4.
|
|
48
|
+
`).filter((o)=>o.trim()).map(Ow);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(Vf(e).mtimeMs!==n.mtimeMs)return;Xf(e)}catch{}}function Ow(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 Ya(e){try{return vw(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Xf(e){try{xw(e)}catch{}}function Yf(e){try{Rw(e)}catch{}}var Lw="2.4.3",Ww=1e4,Fw=2000,Gw=256,zw=32768;function Bw(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 $w(e){return(e??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function Ja(e,t,n,r,o,i,s={}){let a=Bw(t);if(!a)return;let l=Hw(e);if(!l)return;try{let c=(s.now??(()=>new Date))().toISOString(),m=ai(at(n),s.failureStage?Number.POSITIVE_INFINITY:Ww),d=ai(at(r),Fw),u=s.toolName?ai(at(s.toolName),Gw):void 0,f=i===null?void 0:ai(at(i),zw),p=Xa(l,$w(f?.value??null),c.slice(0,7));Dw(p,{recursive:!0,mode:448});let h=Xa(p,`${c.slice(0,10)}-${a}.jsonl`),g={ts:c,id:(s.createId??ki)(),v:Lw,sessionId:a,decision:s.decision??"deny",agent:s.agent,shape:s.shape,level:s.level,configFallback:s.configFallback,toolName:u?.value,command:m.value,segment:d.value,...m.truncated||d.truncated||u?.truncated||f?.truncated?{truncated:!0}:{},reason:o,ruleId:s.ruleId,intent:s.intent,failureStage:s.failureStage,errorCode:s.errorCode,cwd:f?.value??null};Mw(h,`${JSON.stringify(g)}
|
|
49
49
|
`,{encoding:"utf-8",mode:384}),Zf(e,l,s.now)}catch{}}function ai(e,t){return{value:e.slice(0,t),truncated:e.length>t}}function Uw(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&&Nw(n)?n:null}function Hw(e){let t=Uw(e);return t?Xa(t,".cc-safety-net","logs"):null}function Qf(e,t,n,r=!0,o){if(t.decision.kind==="allow"){if(!n||e.route.kind!=="command")return;let a=Jf(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?Jf(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 Jf(e){return"command"in e?e.command??"":""}function ep(e,t,n,r){if(!t)return;let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;Ja(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 tp(e,t,n,r){let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;Ja(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 rp(e,t,n){try{let r=Hf(t,{environment:e,...n.guard});return np(e,t,r,n),r}catch(r){if(!(r instanceof jt))throw r;throw np(e,t,r.evaluation,n,!(r.cause instanceof Ve),{stage:r.stage,errorCode:jw(r.cause)}),r}}function np(e,t,n,r,o=!0,i){ep(e,Qf(t,n,r.guard?.auditAllowed??!1,o,i),r.audit.getSessionId,{agent:r.audit.agent,shape:r.audit.shape})}function jw(e){if(e instanceof D)return V[e.kind].errorCode;if(e instanceof Ve)return"tool-input-limit";if(e instanceof Le)return"structural-shell-syntax-limit";return"unexpected-error"}function Vt(e,t={}){return{malformed:!0,denial:xn(t),cwd:e}}function op(e,t={}){return(n,r)=>{try{return Vw(n,r,e,t)}catch(o){return console.error("CC Safety Net error:",o),e.block(xn())}}}function Vw(e,t,n,r){let o=Ll();if(n.cancelled?.(t))return n.block(xn());let i=n.extract(e,t,o.paths);if(!i)return n.allow;let s=()=>n.getSessionId(e,t);if("malformed"in i)return tp(o,i.denial,s,{agent:n.agent,toolName:i.denial.toolName,cwd:i.cwd}),n.block(i.denial);let a=(l,c)=>{let m=rl(l,{includeEvidence:c});return m?n.block(m):n.allow};try{let l=rp(o,i,{guard:{auditAllowed:Wl(o.env),policyOptions:r.policyOptions,dependencies:r.guardDependencies},audit:{agent:n.agent,getSessionId:s}});return a(l,!0)}catch(l){if(!(l instanceof jt))throw l;if(Rt(Q.debug,o.env))console.error(`CC Safety Net debug: ${n.debugLabel} analysis failed: ${il(l.cause)}`);return a(l.evaluation,n.includeEvidenceOnError(i))}}var Kw={agent:"amp",debugLabel:"amp tool.call",extract:(e,t,n)=>Yw(e,t,n),getSessionId:(e)=>Jw(e),allow:{action:"allow"},block:(e)=>Qw(e),includeEvidenceOnError:(e)=>e.route.kind==="command"},ip=qw();function qw(e={}){return op(Kw,e)}function Yw(e,t,n){if(!e||typeof e!=="object")return Vt(null);let r=e;if(typeof r.tool!=="string"||r.tool.trim()==="")return Vt(null);if(!r.input||typeof r.input!=="object")return Vt(null,{toolName:r.tool});let o=Zw(t,n);if(!o)return Vt(null,{toolName:r.tool});let i=Xw(t,e);if(!i.ok)return Vt(o,{toolName:r.tool});if(!i.command)return qt(r.tool,r.input,{kind:hi(r.tool)},{configCwd:o,executionCwd:o},null);if(typeof i.command.command!=="string"||i.command.command.trim()==="")return Vt(o,{toolName:r.tool});let s=typeof i.command.dir==="string"?Tl(i.command.dir,o,n):o;if(!s)return{malformed:!0,denial:{reason:"CC Safety Net could not use the requested working directory because it does not exist, is inaccessible, is not a directory, or uses an unsupported path form. Use an existing accessible working directory. If the requested directory is missing, create it from an accessible location before retrying the command.",intent:"use_alternative",command:i.command.command,segment:i.command.dir,toolName:r.tool},cwd:o};return qt(r.tool,r.input,{kind:"command",shell:"posix"},{configCwd:o,executionCwd:s},i.command.command)}function Zw(e,t){let n=e.system.workspaceRoot;if(!n)return;try{let r=e.helpers.filePathFromURI(n);if(typeof r!=="string"||r.trim()==="")return;return Al(".",[r],t)}catch{return}}function Xw(e,t){try{return{ok:!0,command:e.helpers.shellCommandFromToolCall(t)}}catch{return{ok:!1}}}function Jw(e){if(!e||typeof e!=="object")return;let t=e.thread?.id;return typeof t==="string"&&t.trim()!==""?t:void 0}function Qw(e){return{action:"reject-and-continue",message:ol(e)}}function eP(e){e.on("tool.call",(t)=>ip(t,e))}export{eP as default};
|
package/dist/api.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{te,c,ce,d,p,W}from"./chunks/index-26getn55.js";import{isAbsolute as r,resolve as n}from"node:path";function w(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()===""||!r(e.cwd))throw TypeError("cwd must be an absolute directory path");let o=n(e.cwd);if(!ce(o))return{kind:"deny",reason:te};return a(t(d("library-api",{command:e.command},{kind:"command",shell:"auto"},{configCwd:o,executionCwd:o},e.command)))}function t(e){try{return W(e,{environment:c()}).decision}catch(o){if(!(o instanceof p))throw o;return o.evaluation.decision}}function a(e){if(e.kind==="allow")return{kind:"allow"};return{kind:"deny",reason:e.reason,...e.ruleId===void 0?{}:{ruleId:e.ruleId}}}export{w as checkCommand};
|
package/dist/bin/hook.js
CHANGED
|
@@ -43,5 +43,5 @@ var xp=["-h","--help"];function Ur(e,t){let n=Object.entries(e.booleans??{}),r=O
|
|
|
43
43
|
`).replace(/\\t/g,"\t").replace(/\\r/g,"\r")}function Xx(e,t,n,r,o,i){let s=zt(e);if(s.length===0||Rt(s[0]??"").toLowerCase()!=="xargs")return!1;let a=on(s),l=s.slice(a.childStart);if(l.length===0)return!1;if(a.replacementToken==="")return!1;let c=a.replacementToken,d=c===null?[...l,Ya]:l.map((m)=>m.split(c).join(Ya));return wi(d,t,n,r,o,i).some((m)=>m.target.includes(Ya))}function Jx(e){let t=zt(e);if(t.length===0)return null;let n=Rt(t[0]??"").toLowerCase();if(!br(n))return null;return Qx(n,t.slice(1))?n:null}function Qx(e,t){let n=el(e);for(let r=0;r<t.length;r++){let o=t[r];if(o===void 0)break;if(Gf.has(o)||Uf(e,o)||/^--(?:eval|exec)=/.test(o))return!1;if(o==="-")return!0;if(o.startsWith("-")){if(n==="python"&&o==="-m")return!1;if(Bx.get(n)?.has(o))r++;continue}return!1}return!0}function el(e){return/^python\d/.test(e)?"python":e}function e_(e){let t=[];for(let n of e){if(jf(n))continue;let r=/^[A-Za-z_][A-Za-z0-9_]*=(.*)$/.exec(n);if(r===null)break;if(r[1]!==void 0&&r[1]!=="")t.push(r[1])}return t}var kf=/^(?:\$\{home\}|\$\{env:(?:userprofile|home)\}|~)(?=[\\/])/i;function t_(e,t){if(!t||!kf.test(e))return e;return`~${e.replace(kf,"").replace(/\\/g,"/")}`}function Et(e,t){if(t==="--")return[];let n=[],r=t.indexOf("=");if(r>0&&r<t.length-1)n.push(t.slice(r+1));if(t.startsWith("-"))return n;if(e==="tar"&&/\.(?:tar|tgz|tar\.gz|zip)$/i.test(t))return n;if(e==="zip"&&/\.zip$/i.test(t))return n;return n.push(t),n}function n_(e){let t=-1,n=!1;for(let r=0;r<e.length;r++){let o=e[r]??"";if(!n&&o==="--"){n=!0;continue}if(n||!/^-(?:[A-Za-z]|-)/.test(o)){if(t===-1)t=r;continue}if(/^--(?:arg|argjson|argfile|rawfile|slurpfile)$/.test(o)){r+=2;continue}if(o==="--indent"||o==="-L"){r++;continue}if(o.startsWith("-L"))continue;if(/^-[srjcCMaSRnbehV]+$/.test(o)||/^--(?:slurp|raw-output0?|join-output|compact-output|color-output|monochrome-output|ascii-output|unbuffered|sort-keys|raw-input|null-input|binary|tab|seq|stream|stream-errors|exit-status|args|jsonargs|help|version|build-configuration)$/.test(o))continue;return e.flatMap((i)=>Et("jq",i))}return e.flatMap((r,o)=>o===t?[]:Et("jq",r))}function r_(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n]??"";if(r==="--"||!r.startsWith("-"))return[...t,...e.slice(n).flatMap((i)=>Et("git",i))];if(t.push(...Et("git",r)),!Oe.has(r))continue;let o=e[n+1];if(o===void 0)break;t.push(...r==="-c"&&o.includes("=")?[o.slice(o.indexOf("=")+1)]:Et("git",o)),n++}return t}function o_(e){return e.flatMap((t,n)=>{let r=s_(t);if(r!==null)return Of(r.flag,r.value);let o=i_(e[n-1]);return o===null?[]:Of(o,t)})}function Of(e,t){if(e==="-F"||e==="--form"){let n=t.indexOf("="),r=n===-1?t:t.slice(n+1);if(!r.startsWith("@")&&!r.startsWith("<"))return[];return Za(r.slice(1).split(";")[0]??"")}if(e==="--data-urlencode"){let n=t.indexOf("@"),r=t.indexOf("=");if(n===-1||r!==-1&&r<n)return[];return Za(t.slice(n+1))}return t.startsWith("@")?Za(t.slice(1)):[]}function i_(e){if(e===void 0)return null;if(Ff.has(e))return e;return/^-[A-Za-z]+[dF]$/.test(e)?`-${e.slice(-1)}`:null}function s_(e){let t=e.slice(0,2);if(e.length>2&&(t==="-d"||t==="-F"))return{flag:t,value:e.slice(2)};let n=e.indexOf("=");if(n===-1)return null;let r=e.slice(0,n);return Ff.has(r)?{flag:r,value:e.slice(n+1)}:null}function Za(e){return e===""||e==="-"?[]:[e]}function a_(e,t,n,r,o,i){let s=e.findIndex((l)=>l.startsWith("-")||l==="("||l==="!"||l===";"),a=[...e.slice(0,s===-1?e.length:s)];for(let l=0;l<e.length;l++){if(!Ex.has(e[l]??""))continue;let c=e.slice(l+1),d=c.findIndex((f)=>Rx.has(f)),m=d===-1?c:c.slice(0,d),u=wi(m,t,n,r,o,i).map((f)=>f.target);if(a.push(...u.filter((f)=>f!=="{}")),!u.includes("{}"))continue;a.push(...e.slice(0,l).flatMap((f,p,g)=>{if(!_x.has(f))return[];let h=g[p+1];return h===void 0?[]:[h,h.replace(/^\*+\//,"").replace(/\/\*+$/g,"").replace(/^\*+/,"").replace(/\*+$/g,"")]}))}return a}function l_(e,t,n,r,o,i,s){let a=[];for(let l=0;l<t.length;l++){let c=t[l];if(c===void 0)break;if(Gf.has(c)||Uf(e,c)){let m=t[l+1];if(m!==void 0)a.push(..._i(e,m,n,r,o,i,s)),l++;continue}let d=/^--(?:eval|exec)=(.*)$/.exec(c);if(d!==null&&d[1]!==void 0){a.push(..._i(e,d[1],n,r,o,i,s));continue}if(!c.startsWith("-"))a.push({target:c,cwd:i})}return a}function Uf(e,t){if(!t.startsWith("-")||t.startsWith("--")||t.length<=2)return!1;return Px.get(t[t.length-1]??"")?.has(el(e))??!1}function c_(e,t,n,r,o,i){if(!e.includes("system"))return[];return fa(e)?.commands.flatMap((s)=>Fn(t.getShellSyntax(s),t,n,r,o,i))??[]}function u_(e){return Array.from(e.matchAll(/\bgetline(?:\s+[A-Za-z_][A-Za-z0-9_]*)?\s*<\s*"((?:\\.|[^"\\])*)"/g)).map((t)=>t[1]).filter((t)=>t!==void 0&&t!=="")}function d_(e){let t=Array.from(e.matchAll(/(['"`])((?:\\.|(?!\1).)*)\1/g)).map((n)=>n[2]).filter((n)=>n!==void 0&&n!=="");return[...t,...t.flatMap(tl),...e.match(Xa)??[]]}function _i(e,t,n,r,o,i,s){let a=(f)=>({target:f,cwd:i}),l=f_(t,m_(e));if(l===null)return d_(t).map(a);let c=l.masked.match(Fx)!==null||l.literals.some((f)=>Gx.test(l.masked.slice(0,f.start))),d=l.masked.match(zx)!==null||l.literals.some((f)=>Hx.test(l.masked.slice(0,f.start))),m=r.refineInlineData===!0&&!yr.has(e),u=m&&!(y_(l.masked)||c||d)?[]:l.literals;return[...u.map((f)=>f.text).filter((f)=>f!=="").map(a),...u.flatMap((f)=>tl(f.text)).map(a),...m?[]:l.literals.flatMap((f)=>f.text.match(Xa)??[]).map(a),...c?l.literals.flatMap((f)=>Ja(f.text,n,r,o,i,s)??[a(f.text)]):[],...d?l.literals.flatMap((f)=>_i(e,f.text.replace(/\\(.)/g,(p,g)=>g==="n"?`
|
|
44
44
|
`:g),n,r,o,i,s)):[],...(l.masked.match(Xa)??[]).map(a)]}function m_(e){let t=el(e);if(t==="python")return"python";if(t==="osascript")return"opaque";return t==="node"||t==="bun"||t==="deno"?"javascript":"simple"}function f_(e,t){if(t==="opaque")return null;let n=e.split(""),r=[];for(let o=0;o<e.length;o++){let i=e[o]??"";if(t==="simple"&&(i==="`"||i==="%"||i==="<")){if(Lx.test(e.slice(o)))return null}let s=i==="'"||i==='"'||t==="javascript"&&i==="`"?i:null;if(s===null)continue;if(s==="`"&&h_(e,o))return null;let a=t==="python"?p_(e,o):"",l=t==="python"&&e.startsWith(s.repeat(3),o)?s.repeat(3):s,c=o+l.length,d=g_(e,c,l);if(d===null)return null;let m=e.slice(c,d);if(/[fF]/.test(a)&&m.includes("{"))return null;if(t==="simple"&&s==='"'&&Wx.test(m))return null;r.push({start:c,text:m});for(let u=o;u<d+l.length;u++)n[u]=" ";o=d+l.length-1}return{masked:n.join(""),literals:r}}function p_(e,t){return Nx.exec(e.slice(Math.max(0,t-3),t))?.[1]??""}function g_(e,t,n){let r=n==="`",o=r||n.length===3;for(let i=t;i<e.length;i++){let s=e[i];if(s==="\\"){i++;continue}if(r&&s==="$"&&e[i+1]==="{")return null;if(!o&&(s===`
|
|
45
45
|
`||s==="\r"))return null;if(e.startsWith(n,i))return i}return null}function h_(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 y_(e){for(let t of e.matchAll(/[A-Za-z_$][A-Za-z0-9_$]*/g)){let n=t[0],r=t.index;if(wx.has(n.toLowerCase()))return!0;let o=n.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_$\s]+/).map((i)=>i.toLowerCase());if(!o.some((i)=>Ax.has(i)))continue;if(o.length>1)return!0;if(C_(e,r)===".")return!0;if(b_(e,r+n.length)==="(")return!0}return!1}function C_(e,t){for(let n=t-1;n>=0;n--)if(!/\s/.test(e[n]??""))return e[n];return}function b_(e,t){for(let n=t;n<e.length;n++)if(!/\s/.test(e[n]??""))return e[n];return}function S_(e,t,n,r,o,i){return __(e).flatMap((s)=>{let a=t.getShellSyntax(s);if(a.status==="invalid")return[];return[...Fn(a,t,{...n,capturedOutput:!0},r,o,i),...v_(a,r)?E_(a,r).map((l)=>({target:l,cwd:o})):[]]})}function v_(e,t){let n=$o(e);for(let r=0;r<n.length;r++){let o=n[r];if(o?.kind!=="word"||Rt(gt(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=gt(s.text,t);if(a==="--decode"||!a.startsWith("--")&&a.startsWith("-")&&/[dD]/.test(a))return!0}}return!1}function E_(e,t){return $o(e).flatMap((n)=>n.kind==="word"?[gt(n.text,t)]:n.kind==="redirection"&&n.target?[gt(n.target,t)]:[]).flatMap(tl)}function tl(e){let t=x_(e);if(t===null)return[];let n=Buffer.from(t,"base64").toString("utf8");if(n===""||R_(n))return[];return Buffer.from(n,"utf8").toString("base64").replace(/=+$/g,"")===t.replace(/=+$/g,"")?[n]:[]}function R_(e){return Array.from(e).some((t)=>{let n=t.charCodeAt(0);return n<32||n===127})}function x_(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 __(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(Xn(o,n))continue;if($f(e,r,n)){let i=w_(e,r+1);if(i!==null)t.push(i.body),r=i.endIndex;continue}if(!n.inSingle&&o==="`"){let i=A_(e,r);if(i!==null)t.push(i.body),r=i.endIndex}}return t}function w_(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(Xn(i,n))continue;if($f(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 A_(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 $f(e,t,n){return!n.inSingle&&e[t]==="$"&&e[t+1]==="("&&e[t+2]!=="("}function P_(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 m=d[1]??"",u=d[2];if(m===Ix)o=!0;if(Ox.has(m))r=!0;if(u!==void 0){if(m===Pf)t.push(u);continue}if(Dx.has(m)){let f=e[l+1];if(m===Pf&&f!==void 0)t.push(f);l++}continue}if(c.startsWith("-")&&c.length>1){let m=c.slice(1),u="",f="";for(let g=0;g<m.length;g++){let h=m[g]??"";if(kx.has(h))r=!0;if(Mx.has(h)){u=h,f=m.slice(g+1);break}}if(u==="")continue;if(f.length>0){if(u===Af)t.push(f);continue}let p=e[l+1];if(u===Af&&p!==void 0)t.push(p);l++;continue}n.push(c)}let a=!r&&!o?n.slice(1):n;return[...t,...a]}function zt(e){let t=e.findIndex((n)=>!jf(n)&&!/^[A-Za-z_][A-Za-z0-9_]*=.*/.test(n));return t===-1?[]:[...e.slice(t)]}function jf(e){return e==="env"||e==="command"||e==="builtin"||e==="sudo"}var T_=new Set(["id_rsa.pub","id_ed25519.pub","id_ecdsa.pub"]),I_=".env.",k_=new Set([".env.example",".env.sample",".env.template",".env.defaults"]),O_=[".env.example.",".env.sample."];function M_(e){let t;try{t=new URL(e.trim())}catch{return!1}return t.protocol!=="file:"&&t.host!==""}function D_(e){return e.length>0&&!/\s/.test(e)}function N_(e,t,n,r){try{let o=zr(e,t,n,r);return o!==""&&n.paths.entryKind(o)!=="missing"}catch(o){if(o instanceof O)throw o;return!1}}var L_=new Set(["node_modules","__pycache__"]),W_=[["vendor","bundle"],["vendor","cache"]];function F_(e,t,n,r,o){if(M_(e))return null;let i=st(e,t,r,o);if(!i)return null;let s=V(i.split("/").pop()??""),a=V(i),l=()=>D_(s)||N_(e,t,r,o);if(k_.has(s)||O_.some((u)=>s.startsWith(u)))return null;let c=V($_(e,t,r,o));for(let u of ps){let f=`~/${u.suffixParts.join("/")}`;if((Df(a,f)||Df(c,f))&&vt(u.id,n))return u.id}let d=G_(i,t,n,r,o);if(d)return d;if(T_.has(s))return null;for(let u of fs)if(s===u.basename&&vt(u.id,n))return u.id;if(s.startsWith(I_)&&vt(lo.id,n)&&l())return lo.id;for(let u of gs)if(s.length>u.prefix.length&&s.startsWith(u.prefix)){let f=s.slice(u.prefix.length)[0];if((f==="-"||f==="_")&&vt(u.id,n)&&l())return u.id}for(let u of hs)if(s.length>u.prefix.length&&s.startsWith(u.prefix)){if(s.slice(u.prefix.length)===u.suffix&&vt(u.id,n))return u.id}if(B_(a))return null;if(!s.includes(".")&&Qn.pattern.test(s)&&vt(Qn.id,n))return Qn.id;let m=U_(s,n);if(m)return m;return null}function G_(e,t,n,r,o){return co.find((i)=>{if(!vt(i.id,n))return!1;switch(i.id){case"secret.cli.claude-code":return H(e,j(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,j(r.env.get("CLAUDE_CONFIG_DIR"),"~/.claude",t,r,o),["settings.json","settings.local.json"])||Gr(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,st("~/.gemini/config",t,r,o),["hooks.json","mcp_config.json"]);case"secret.cli.codex":{let s=j(r.env.get("CODEX_HOME"),"~/.codex",t,r,o);return H(e,s,["auth.json",".credentials.json"])||Fr(e,s,["secrets",".sandbox-secrets"])}case"secret.cli.codex.config":{let s=j(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,ye(j(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")?[ye(j(r.env.get("ProgramData"),"",t,r,o),"gemini-cli")]:[];return H(e,ye(j(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()?Gr(e,a,t,r,o):!1)||["/Library/Application Support/GeminiCli","/etc/gemini-cli",...l].some((c)=>H(e,st(c,t,r,o),["settings.json"]))}case"secret.cli.copilot-cli":{let s=j(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o);return H(e,s,["config.json"])||Fr(e,s,["mcp-oauth-config","mcp-secrets"])}case"secret.cli.copilot-cli.config":return H(e,j(r.env.get("COPILOT_HOME"),"~/.copilot",t,r,o),["mcp-config.json"]);case"secret.cli.kimi-code":{let s=j(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),a=j(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o);return H(e,s,["server.token"])||Fr(e,s,["credentials"])||Fr(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,j(r.env.get("KIMI_CODE_HOME"),"~/.kimi-code",t,r,o),s)||H(e,j(r.env.get("KIMI_SHARE_DIR"),"~/.kimi",t,r,o),[...s,"config.json","config.json.bak"])}case"secret.cli.opencode":{let s=ye(j(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)=>Gr(e,d,t,r,o))}case"secret.cli.opencode.config":{let s=r.env.get("OPENCODE_CONFIG_DIR")?j(r.env.get("OPENCODE_CONFIG_DIR"),"~/.config/opencode",t,r,o):ye(j(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"opencode"),a=r.env.get("ProgramData")?[ye(j(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,l)||(c?.trim()?Gr(e,c,t,r,o):!1)||["/Library/Application Support/opencode","/etc/opencode",...a].some((d)=>H(e,st(d,t,r,o),l))}case"secret.cli.pi":return H(e,j(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["auth.json"]);case"secret.cli.pi.config":return H(e,j(r.env.get("PI_CODING_AGENT_DIR"),"~/.pi/agent",t,r,o),["models.json"]);case"secret.cli.amp":{let s=st("~",t,r,o);return[ye(j(r.env.get("XDG_DATA_HOME"),"~/.local/share",t,r,o),"amp"),ye(s,".local","share","amp")].some((l)=>H(e,l,["secrets.json"]))||Fr(e,ye(s,".amp"),["oauth"])}case"secret.cli.amp.config":{let s=["settings.json","settings.jsonc"],a=[ye(j(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"amp"),ye(st("~",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()?Gr(e,c,t,r,o):!1)}case"secret.cli.cursor":{let s=ye(j(r.env.get("XDG_CONFIG_HOME"),"~/.config",t,r,o),"cursor"),a=ye(j(r.env.get("CURSOR_DATA_DIR"),"~/.cursor",t,r,o),"projects");return H(e,st("~/.cursor",t,r,o),["auth.json"])||H(e,s,["auth.json"])||V(e).split("/").at(-1)==="mcp-auth.json"&&ln(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,j(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,j(r.env.get("GROK_HOME"),"~/.grok",t,r,o),["config.toml","managed_config.toml","requirements.toml"])||H(e,st("/etc/grok",t,r,o),["managed_config.toml","requirements.toml"])}default:return!1}})?.id??null}var Mf=new WeakMap;function j(e,t,n,r,o){let i=Mf.get(o)??new Map;Mf.set(o,i);let s=`${n}\x00${e??""}\x00${t}`,a=i.get(s);if(a!==void 0)return a;let l=st(e?.trim()?e:t,n,r,o);return i.set(s,l),l}function H(e,t,n){return n.some((r)=>Vf(e,ye(t,r)))}function Fr(e,t,n){return n.some((r)=>ln(V(e),V(ye(t,r))))}function Gr(e,t,n,r,o){return Vf(e,st(t,n,r,o))}function Vf(e,t){return V(e)===V(t)}function ye(e,...t){return nt([e,...t].filter(Boolean).join("/"))}function z_(e,t,n,r,o,i){if(n.length===0)return!1;let s=V(zr(e,t,o,i));return n.some((a)=>ln(s,V(zr(a,r,o,i))))}function H_(e,t,n,r,o,i){if(n.length===0)return!1;let s=V(zr(e,t,o,i));if(!s)return!1;let a=o.env.get("HOME")??o.home,l=a?nt(D(ke(a),o.paths,i)):"",c=V(l),d=o.env.get("CC_SAFETY_NET_HOME"),m=V(d?nt(D(Te.resolve(ke(d)),o.paths,i)):l&&nt(D(`${l}/.cc-safety-net`,o.paths,i)));if(m&&ln(s,m))return!1;return n.some((u)=>{let f=V(zr(u,r,o,i));if(!f)return!1;if(c&&(c===f||c.startsWith(f.endsWith("/")?f:`${f}/`)))return!1;return ln(s,f)})}function B_(e){let t=e.split("/");return t.some((n)=>L_.has(n))||W_.some(([n,r])=>t.some((o,i)=>o===n&&t[i+1]===r))}function U_(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 ys)if(r===o.extension&&vt(o.id,t))return o.id;for(let o of Cs)if(o.pattern.test(r)&&vt(o.id,t))return o.id;return null}function V(e){return e.toLowerCase()}function vt(e,t){return!t?.disabledRules?.includes(e)}function st(e,t,n,r){let{home:o,normalized:i}=nl(e,n,r);if(!i)return"";if(!o)return i;let s=rl(i,o),a=Te.isAbsolute(s)?s:nt(Te.resolve(t,s)),l=nt(D(a,n.paths,r));if(!ln(l,o)){if(Te.isAbsolute(s))return l;return l===a?i:l}let c=l.slice(o.length);return c?`~${c}`:"~"}function Df(e,t){return e===t||e.startsWith(`${t}/`)}function $_(e,t,n,r){let{home:o,normalized:i}=nl(e,n,r);if(!i||!o)return"";let s=rl(i,o),a=Te.posix.normalize(Te.isAbsolute(s)?s:nt(Te.resolve(t,s))),l=nt(ke(n.env.get("HOME")??n.home)),c=(u)=>process.platform==="win32"?u.toLowerCase():u,d=[o,l].find((u)=>u!==""&&ln(c(a),c(u)));if(d===void 0)return"";let m=a.slice(d.length);return m?`~${m}`:"~"}function zr(e,t,n,r){let{home:o,normalized:i}=nl(e,n,r);if(!i)return"";let s=o?rl(i,o):i;return nt(D(Te.isAbsolute(s)?s:Te.resolve(t,s),n.paths,r))}function nl(e,t,n){let r=t.env.get("HOME")??t.home,o=r?nt(D(ke(r),t.paths,n)):"",i=nt(ke(j_(gt(e,t))));return{home:o,normalized:i}}function j_(e){if(!e.trim().toLowerCase().startsWith("file:"))return e;try{return Nf.fileURLToPath(e)}catch{return e}}function rl(e,t){if(e==="~")return t;if(e.startsWith("~/"))return ye(t,e.slice(2));return e}function V_(e){if(process.platform==="win32")return!0;return Te.win32.parse(e).root.length>1}function nt(e){let t=e.trim(),n=(t.includes("\\")&&V_(t)?t.replace(/\\/g,"/"):t).replace(/\/{2,}/g,"/").replace(/^\.\//,"");if(n==="/")return n;return n.replace(/\/+$/g,"")}function ln(e,t){return e===t||e.startsWith(t.endsWith("/")?t:`${t}/`)}function Rt(e){return e.split(/[\\/]/).pop()?.replace(/\.exe$/i,"")??e}class cn 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 K_={findPolicyMutation:xf,findGitMetadataMutation:ld,resolveGitMetadata:q_,loadPolicySnapshot:Qc,findSensitiveTarget:zf,analyzeCommand:gf,getModes:Yi};function Kf(e,t){let n={...K_,...t.dependencies},r=X_(e),o=Hr(e)?e.command:r,i=Ht("policy-protection",o,()=>Sr(e)),s=we(i,"input-candidate"),a=we(i,"declared-command");if(Hr(e)&&e.command?.trim()&&a?.program.status==="limited")return{stage:"command-analysis",decision:{kind:"deny",reason:rt,intent:"stop_and_explain",evidence:{command:e.command,segment:e.command}}};if(s?.program.status==="limited")return{stage:"command-validation",decision:{kind:"deny",reason:xd,intent:"stop_and_explain"}};let l=de(),c=Ht("policy-protection",o,()=>n.resolveGitMetadata([e.context.executionCwd,e.context.configCwd],t.environment)),d=Ht("policy-protection",o,()=>n.findPolicyMutation(i,t.environment,l));if(d){let E=o??d.target;return{stage:"policy-protection",decision:{kind:"deny",reason:Rf,intent:"hard_stop",evidence:{command:E,segment:d.target}}}}let m=Ht("policy-protection",o,()=>bf(i,t.environment,l));if(m){let E=o??m.target;return{stage:"policy-protection",decision:{kind:"deny",reason:Cf,intent:"hard_stop",evidence:{command:E,segment:m.target}}}}let u=Ht("policy-protection",o,()=>n.findGitMetadataMutation(i,c,t.environment,l));if(u){let E=o??u.target;return{stage:"policy-protection",decision:{kind:"deny",reason:Be,intent:"hard_stop",evidence:{command:E,segment:u.target}}}}let f=Ht("config-load",o,()=>n.loadPolicySnapshot(t.environment,{...t.policyOptions,cwd:e.context.configCwd})),p=f.policy,g=n.getModes(p,t.environment.env),h={level:g.effectiveLevel,...Y_(f)},y=p.secretProtection.enabled===!1?null:Ht("secret-protection",o,()=>n.findSensitiveTarget(i,p.secretProtection,t.environment,l,{strict:Hr(e)||s?.program.dialect==="powershell"?g.strict:void 0}));if(y){let E=o??y.target;return{stage:"secret-protection",...h,decision:{kind:"deny",reason:Lf,intent:"hard_stop",ruleId:y.ruleId,evidence:{command:E,segment:y.target}}}}if(!Hr(e))return{stage:"non-command",...h,decision:{kind:"allow"}};if(!e.command||e.command.trim()==="")return{...ol("command-validation",o),...h};let v=Ht("command-analysis",o,()=>hf(()=>n.analyzeCommand(e.command,{cwd:e.context.executionCwd,shell:e.route.shell,policySnapshot:f,environment:t.environment,protectedGitMetadata:c,effectiveCapabilities:g.capabilities,strict:g.strict,paranoidRm:g.paranoidRm,paranoidInterpreters:g.paranoidInterpreters,worktreeMode:g.worktreeMode,budget:l,...t.trace?{trace:t.trace}:{}},Z_(i),i.store),e.command,t.trace));if(v.decision)return{stage:"command-analysis",...h,..."errorCode"in v?{errorCode:v.errorCode}:{},decision:v.decision};return{stage:"command-analysis",...h,decision:{kind:"allow"}}}function q_(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 Y_(e){if(e.state==="ready")return{};return{configFallback:{reason:e.reason}}}function Z_(e){return we(e,"declared-command")?.program}function X_(e){try{return wt(e.input)}catch(t){let n=Hr(e)?e.command:void 0;throw new cn("policy-protection",ol("policy-protection",t instanceof be?void 0:n,t),t)}}function Ht(e,t,n){try{return n()}catch(r){throw new cn(e,ol(e,r instanceof be?void 0:t,r),r)}}function ol(e,t,n){let r=n instanceof O||n instanceof Xe;return{stage:e,decision:{kind:"deny",reason:r?Di:$n,intent:"stop_and_explain",...t?{evidence:{command:t,segment:t}}:{}}}}function Hr(e){return e.route.kind==="command"}var Pi=require("node:fs"),zn=require("node:path");var le=require("node:fs"),Gn=require("node:path");function qf(e,t={}){return Co(yn(e,t),e.home).policy.audit.retention_days}var sl=86400000,J_=".last-prune",Q_=/^\d{4}-\d{2}$/,ew=/^((\d{4}-\d{2})-\d{2})-.+\.jsonl$/,Yf=(e)=>Math.floor(e/sl);function Xf(e,t,n=()=>new Date){try{let r=n().getTime();if(!le.statSync(t,{throwIfNoEntry:!1})?.isDirectory())return;let o=Gn.join(t,J_),i=le.statSync(o,{throwIfNoEntry:!1})?.mtimeMs;if(i!==void 0&&Yf(i)===Yf(r))return;let s=r-qf(e)*sl,a=new Date(r).toISOString().slice(0,7);for(let l of il(t)){if(l.isDirectory()){tw(Gn.join(t,l.name),s,a);continue}if(l.isFile()&&l.name.endsWith(".jsonl"))nw(Gn.join(t,l.name),s)}le.writeFileSync(o,"",{mode:384}),le.utimesSync(o,r/1000,r/1000)}catch{}}function tw(e,t,n){for(let r of il(e)){if(!r.isDirectory()||!Q_.test(r.name))continue;let o=Gn.join(e,r.name);for(let i of il(o)){if(!i.isFile())continue;let s=ew.exec(i.name);if(!s||s[2]!==r.name)continue;let a=Date.parse(`${s[1]}T00:00:00.000Z`)+sl;if(!Number.isFinite(a)||a>=t)continue;Jf(Gn.join(o,i.name))}if(r.name!==n)Zf(o)}Zf(e)}function nw(e,t){try{let n=le.lstatSync(e);if(n.mtimeMs>=t)return;let r=le.readFileSync(e,"utf-8").split(`
|
|
46
|
-
`).filter((o)=>o.trim()).map(rw);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(le.lstatSync(e).mtimeMs!==n.mtimeMs)return;Jf(e)}catch{}}function rw(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 il(e){try{return le.readdirSync(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Jf(e){try{le.unlinkSync(e)}catch{}}function Zf(e){try{le.rmdirSync(e)}catch{}}var ow="2.4.
|
|
46
|
+
`).filter((o)=>o.trim()).map(rw);if(r.length===0)return;if(r.some((o)=>o===void 0||o>=t))return;if(le.lstatSync(e).mtimeMs!==n.mtimeMs)return;Jf(e)}catch{}}function rw(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 il(e){try{return le.readdirSync(e,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}function Jf(e){try{le.unlinkSync(e)}catch{}}function Zf(e){try{le.rmdirSync(e)}catch{}}var ow="2.4.3",iw=1e4,sw=2000,aw=256,lw=32768;function cw(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 uw(e){return(e??"").replace(/[^A-Za-z0-9]/g,"-").slice(0,180)||"no-cwd"}function al(e,t,n,r,o,i,s={}){let a=cw(t);if(!a)return;let l=mw(e);if(!l)return;try{let c=(s.now??(()=>new Date))().toISOString(),d=Ai(xt(n),s.failureStage?Number.POSITIVE_INFINITY:iw),m=Ai(xt(r),sw),u=s.toolName?Ai(xt(s.toolName),aw):void 0,f=i===null?void 0:Ai(xt(i),lw),p=zn.join(l,uw(f?.value??null),c.slice(0,7));Pi.mkdirSync(p,{recursive:!0,mode:448});let g=zn.join(p,`${c.slice(0,10)}-${a}.jsonl`),h={ts:c,id:(s.createId??Xi)(),v:ow,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:m.value,...d.truncated||m.truncated||u?.truncated||f?.truncated?{truncated:!0}:{},reason:o,ruleId:s.ruleId,intent:s.intent,failureStage:s.failureStage,errorCode:s.errorCode,cwd:f?.value??null};Pi.appendFileSync(g,`${JSON.stringify(h)}
|
|
47
47
|
`,{encoding:"utf-8",mode:384}),Xf(e,l,s.now)}catch{}}function Ai(e,t){return{value:e.slice(0,t),truncated:e.length>t}}function dw(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&&zn.isAbsolute(n)?n:null}function mw(e){let t=dw(e);return t?zn.join(t,".cc-safety-net","logs"):null}function ep(e,t,n,r=!0,o){if(t.decision.kind==="allow"){if(!n||e.route.kind!=="command")return;let a=Qf(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?Qf(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 Qf(e){return"command"in e?e.command??"":""}function tp(e,t,n,r){if(!t)return;let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;al(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 np(e,t,n,r){let o;try{o=n()}catch{return}if(typeof o!=="string"||!o.trim())return;al(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 op(e,t,n){try{let r=Kf(t,{environment:e,...n.guard});return rp(e,t,r,n),r}catch(r){if(!(r instanceof cn))throw r;throw rp(e,t,r.evaluation,n,!(r.cause instanceof be),{stage:r.stage,errorCode:fw(r.cause)}),r}}function rp(e,t,n,r,o=!0,i){tp(e,ep(t,n,r.guard?.auditAllowed??!1,o,i),r.audit.getSessionId,{agent:r.audit.agent,shape:r.audit.shape})}function fw(e){if(e instanceof O)return Z[e.kind].errorCode;if(e instanceof be)return"tool-input-limit";if(e instanceof Xe)return"structural-shell-syntax-limit";return"unexpected-error"}var at=(e,t,n,r,o)=>Ll(e.cwd,t,n,r,o.paths,process.cwd());function pw(e,t){console.log(JSON.stringify(e(pl(t))))}async function gw(e){let t;try{t=(await Nl(process.stdin)).trim()}catch{e({reason:"Failed to parse hook input JSON."});return}if(!t){e({reason:"Missing hook input JSON."});return}return Yr(t,e,"Failed to parse hook input JSON.")}async function hw(e){let t=Vl(),n=await gw(e.outputDeny);if(n===void 0)return;if(!n||typeof n!=="object"||Array.isArray(n)){ee(e.outputDeny);return}if(!e.isSupported(n))return;let r=e.getAgent?.(n,t)??e.agent,o=e.agent===r?void 0:e.agent,i=Sw(n),s=(p,g)=>{np(t,p,()=>e.getSessionId(n),{agent:r,shape:o,toolName:g,cwd:i}),e.outputDeny(p)},a=e.getToolName(n);if(typeof a!=="string"||a.trim()===""){ee((p)=>s(p),bw(n));return}let l=a,c=(p)=>s(p,l),d;try{d=e.getToolInput(n,l,c,t)}catch(p){if(!(p instanceof be))throw p;ee(c,void 0,l);return}if(!d.ok)return;let m=e.getContext(n,d.input,l,c,t);if(!m)return;let u;try{u=wt(d.input)}catch(p){if(!(p instanceof be))throw p;ee(c,void 0,l);return}let f=qn(l,d.input,d.route,m,u??null);try{let p=op(t,f,{guard:{auditAllowed:Kl(t.env),dependencies:e.guardDependencies},audit:{agent:r,shape:o,getSessionId:()=>e.getSessionId(n)}}),g=Ni(p,{includeEvidence:!0,toolName:p.stage==="command-analysis"?void 0:l});if(g){e.outputDeny(g);return}e.outputAllow?.()}catch(p){if(!(p instanceof cn))throw p;yw(p,t.env);let g=Ni(p.evaluation,{includeEvidence:!0,toolName:p.evaluation.stage==="command-analysis"?void 0:l});if(g)e.outputDeny(g);return}}function yw(e,t){if(!Ut(ae.debug,t))return;console.error(`CC Safety Net debug: ${Cw(e.stage)}: ${gl(e.cause)}`)}function Cw(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 bw(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 Sw(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 Ie(e){let t=(o)=>pw(e.createDenyOutput,o),n=e.createAllowOutput,r=n?()=>console.log(JSON.stringify(n())):void 0;try{await hw({...e,outputDeny:t,outputAllow:r})}catch(o){console.error("CC Safety Net error:",o),t(fn())}}var vw=new Map([["run_command","auto"]]),Ew=new Set(["absolutepath","directorypath","file_path","filepath","path","searchdirectory","searchpath","target_file","targetfile"]);function ip(e){return se(e,vw)}async function sp(){await Ie({agent:"antigravity-cli",createDenyOutput:(e)=>({decision:"deny",reason:e}),isSupported:()=>!0,getToolName:(e)=>e.toolCall?.name,getToolInput:(e,t)=>({ok:!0,input:Aw(e.toolCall?.args,t),route:ip(t)}),getContext:Rw,getSessionId:(e)=>e.conversationId})}function Rw(e,t,n,r,o){let s=ww(e,o.paths).flatMap((d)=>{let m=it([d],o.paths);return m?[m]:[]});if(!s[0])return un(r,t,n),null;if(n!=="run_command"){let d;try{d=xw(t,n,s,o.paths)}catch(m){if(m instanceof be)return un(r,void 0,n),null;if(!(m instanceof O))throw m;return un(r,t,n),null}if(!d)return un(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 un(r,t,n),null;let c=ut(l,s,o.paths);if(c){let d=ap(c,s);if(!d)return un(r,t,n,l),null;return{configCwd:d,executionCwd:c}}return un(r,t,n,l),null}function xw(e,t,n,r){let o=ip(t),i=[...Kr(e,Ew),...o.kind==="patch"?qr(e):[]].filter(Hn.isAbsolute),s=de(),a=new Set(i.flatMap((l)=>{let c=ap(D(l,r,s),n);return c?[c]:[]}));if(a.size>1)return null;return[...a][0]??n[0]??null}function ap(e,t){return t.filter((n)=>_w(e,n)).reduce((n,r)=>r.length>n.length?r:n,"")||null}function _w(e,t){let n=Hn.relative(t,e);return n===""||!n.startsWith("..")&&!Hn.isAbsolute(n)}function un(e,t,n,r){let o=t&&typeof t==="object"?t.command:void 0;e(fn({command:typeof o==="string"?o:void 0,segment:r,toolName:n}))}function ww(e,t){if(e.workspacePaths===void 0)return[process.cwd()];let n=Array.isArray(e.workspacePaths)?e.workspacePaths.filter((r)=>typeof r==="string"&&r.trim()!==""):[];return it(n,t)?n:[]}function Aw(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 Ti=[{id:"antigravity-cli",displayName:"Antigravity CLI",doctorOrder:3,runtime:{order:1,flags:["-ac","--agy-cli"],description:"Run as Antigravity CLI PreToolUse hook",legacyTopLevelFlags:[]},install:{order:2,flag:"--agy-cli",artifactKind:"hook config",probeCommand:["agy","--version"]}},{id:"claude-code",displayName:"Claude Code",doctorOrder:1,runtime:{order:2,displayName:"Coding CLI",flags:["-cc","--coding-cli"],legacyFlags:["--claude-code"],description:"Run as Coding CLI PreToolUse hook",legacyTopLevelFlags:["-cc","--claude-code"]},install:{order:3,flag:"--claude-code",artifactKind:"plugin",probeCommand:["claude","--version"]}},{id:"codex",displayName:"Codex",doctorOrder:4,runtime:{order:3,flags:["-cx","--codex"],description:"Run as a Codex PreToolUse hook",legacyTopLevelFlags:[]},install:{order:4,flag:"--codex",artifactKind:"plugin",probeCommand:["codex","--version"]}},{id:"copilot-cli",displayName:"GitHub Copilot CLI",doctorOrder:7,runtime:{order:6,flags:["-cp","--copilot-cli"],description:"Run as GitHub Copilot CLI PreToolUse hook",legacyTopLevelFlags:["-cp","--copilot-cli"]},install:{order:7,flag:"--copilot-cli",artifactKind:"plugin",probeCommand:["copilot","--binary-version"]}},{id:"gemini-cli",displayName:"Gemini CLI",doctorOrder:6,runtime:{order:5,flags:["-gc","--gemini-cli"],description:"Run as Gemini CLI BeforeTool hook",legacyTopLevelFlags:["-gc","--gemini-cli"]},install:{order:6,flag:"--gemini-cli",artifactKind:"extension",probeCommand:["gemini","--version"]}},{id:"grok-build",displayName:"Grok Build",doctorOrder:8,runtime:{order:7,flags:["-gb","--grok-build"],description:"Run as Grok Build PreToolUse hook",legacyTopLevelFlags:[]},install:{order:8,flag:"--grok-build",artifactKind:"hook config",probeCommand:["grok","--version"]}},{id:"hermes-agent",displayName:"Hermes Agent",doctorOrder:9,runtime:{order:8,flags:["-ha","--hermes-agent"],description:"Run as Hermes Agent pre_tool_call hook",legacyTopLevelFlags:[]},install:{order:9,flag:"--hermes-agent",artifactKind:"plugin",probeCommand:["hermes","--version"]}},{id:"kimi-code",displayName:"Kimi Code",doctorOrder:10,runtime:{order:9,flags:["-kc","--kimi-code"],description:"Run as Kimi Code PreToolUse hook",legacyTopLevelFlags:[]},install:{order:10,flag:"--kimi-code",artifactKind:"hook config",probeCommand:["kimi","--version"]}},{id:"openclaw",displayName:"OpenClaw",doctorOrder:11,install:{order:11,flag:"--openclaw",artifactKind:"plugin",probeCommand:["openclaw","--version"]}},{id:"opencode",displayName:"OpenCode",doctorOrder:12,install:{order:12,flag:"--opencode",artifactKind:"plugin",probeCommand:["opencode","--version"]}},{id:"pi",displayName:"Pi",doctorOrder:13,install:{order:13,flag:"--pi",artifactKind:"package",probeCommand:["pi","--version"]}},{id:"cursor",displayName:"Cursor",doctorOrder:5,runtime:{order:4,flags:["-cu","--cursor"],description:"Run as Cursor preToolUse hook",legacyTopLevelFlags:[]},install:{order:5,flag:"--cursor",artifactKind:"hook config",probeCommand:["cursor","--version"]}},{id:"amp",displayName:"Amp Code",doctorOrder:2,install:{order:1,flag:"--amp",artifactKind:"plugin",probeCommand:["amp","--version"]}}],cN=Ti.slice().sort((e,t)=>e.doctorOrder-t.doctorOrder).map((e)=>e.id),lp=Ti.filter((e)=>("runtime"in e)).slice().sort((e,t)=>e.runtime.order-t.runtime.order).map((e)=>({id:e.id,displayName:"displayName"in e.runtime?e.runtime.displayName:e.displayName,flags:e.runtime.flags,legacyFlags:"legacyFlags"in e.runtime?e.runtime.legacyFlags:[],description:e.runtime.description,legacyTopLevelFlags:e.runtime.legacyTopLevelFlags})),uN=Ti.slice().sort((e,t)=>e.install.order-t.install.order).map((e)=>({id:e.id,...e.install})).map(({order:e,...t})=>t),dN=Object.fromEntries(Ti.map((e)=>[e.id,e.displayName]));var dn=require("node:path");function cp(e,t){if(e!==void 0&&e!==null&&typeof e!=="string")return"unknown";if(typeof e==="string"&&!dn.isAbsolute(e))return"unknown";try{let n=de(),r=typeof e==="string"&&e?D(e,t.paths,n):void 0,o=t.home,i=[["codex",t.env.get("CODEX_HOME")||dn.join(o,".codex")],["copilot-cli",t.env.get("COPILOT_HOME")||dn.join(o,".copilot")],["claude-code",t.env.get("CLAUDE_CONFIG_DIR")||dn.join(o,".claude")]],s=r?i.flatMap(([a,l])=>{if(!dn.isAbsolute(l))return[];return $i(r,D(l,t.paths,n))?[a]:[]}):[];if(s.length===1)return s[0]??"unknown";if(s.length>1)return"unknown"}catch{return"unknown"}if(t.env.get("CLAUDECODE")==="1"||Boolean(t.env.get("CLAUDE_CODE_ENTRYPOINT")))return"claude-code";return"unknown"}var ll="PreToolUse",up="BeforeTool",dp="pre_tool_call";async function Bn(e){await Ie({agent:e.agent,...e.getAgent?{getAgent:e.getAgent}:{},createDenyOutput:(t)=>({hookSpecificOutput:{hookEventName:ll,permissionDecision:"deny",permissionDecisionReason:t}}),isSupported:(t)=>t.hook_event_name===ll,getToolName:(t)=>t.tool_name,getToolInput:(t,n)=>({ok:!0,input:t.tool_input,route:e.getToolRoute(n)}),getContext:e.getContext??at,getSessionId:(t)=>t.session_id})}var Pw=new Map([["Bash","posix"],["PowerShell","powershell"]]);function Tw(e){return se(e,Pw)}async function mp(){await Bn({agent:"claude-code",getAgent:(e,t)=>cp(e.transcript_path,t),getToolRoute:Tw})}var Iw=new Map([["Bash","auto"]]);async function fp(){await Bn({agent:"codex",getToolRoute:(e)=>se(e,Iw)})}var kw=new Map([["bash","auto"],["Bash","auto"],["powershell","powershell"],["PowerShell","powershell"]]);function Ow(e){return se(e,kw)}async function pp(){await Ie({agent:"copilot-cli",createDenyOutput:(e)=>({permissionDecision:"deny",permissionDecisionReason:e}),isSupported:()=>!0,getToolName:(e)=>e.toolName,getToolInput:(e,t,n)=>{if(typeof e.toolArgs!=="string")return n({reason:"Failed to parse toolArgs JSON."}),{ok:!1};let r=Yr(e.toolArgs,n,"Failed to parse toolArgs JSON.");if(r===void 0)return{ok:!1};return{ok:!0,input:r,route:Ow(t)}},getContext:at,getSessionId:(e)=>typeof e.sessionId==="string"&&e.sessionId.trim()?e.sessionId:void 0})}var Mw=new Map([["Shell","auto"]]);function Dw(e){return se(e,Mw)}async function gp(){await Ie({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:Dw(t)}),getContext:Nw,getSessionId:(e)=>e.conversation_id})}function Nw(e,t,n,r,o){let i=Lw(e,o.paths);if(!i[0])return ee(r,t,n),null;let s=ut(Fw(e.cwd),i,o.paths);if(!s)return ee(r,t,n,typeof e.cwd==="string"?e.cwd:void 0),null;if(t===null||typeof t!=="object"||Array.isArray(t))return{configCwd:s,executionCwd:s};if(!Object.hasOwn(t,"working_directory"))return{configCwd:s,executionCwd:s};let a=t.working_directory;if(typeof a!=="string"||a.trim()==="")return ee(r,t,n),null;let l=ut(a,i,o.paths);if(!l)return ee(r,t,n,a),null;return{configCwd:s,executionCwd:l}}function Lw(e,t){return Ww(e).flatMap((n)=>{let r=it([n],t);return r?[r]:[]})}function Ww(e){if(e.workspace_roots===void 0)return typeof e.cwd==="string"&&e.cwd.trim()!==""?[e.cwd]:[];if(!Array.isArray(e.workspace_roots))return[];return e.workspace_roots.filter((t)=>typeof t==="string"&&t.trim()!=="")}function Fw(e){return typeof e==="string"&&e.trim()!==""?e:"."}var Gw=new Map([["run_shell_command","auto"]]);function zw(e){return se(e,Gw)}async function hp(){await Ie({agent:"gemini-cli",createDenyOutput:(e)=>({decision:"deny",reason:e,systemMessage:e}),isSupported:(e)=>e.hook_event_name===up,getToolName:(e)=>e.tool_name,getToolInput:(e,t)=>({ok:!0,input:e.tool_input,route:zw(t)}),getContext:at,getSessionId:(e)=>e.session_id})}var Hw=new Map([["run_terminal_command","auto"]]);function Bw(e){return se(e,Hw)}async function yp(){await Ie({agent:"grok-build",createDenyOutput:(e)=>({decision:"deny",reason:e}),createAllowOutput:()=>({decision:"allow"}),isSupported:()=>!0,getToolName:(e)=>e.toolName,getToolInput:(e,t,n)=>{if(e.toolInputTruncated===!0)return ee(n,e.toolInput,t),{ok:!1};return{ok:!0,input:e.toolInput,route:Bw(t)}},getContext:Uw,getSessionId:(e)=>e.sessionId})}function Uw(e,t,n,r,o){let i=it($w(e),o.paths);if(!i)return ee(r,t,n),null;let s=ut(jw(e.cwd),[i],o.paths);if(!s)return ee(r,t,n,typeof e.cwd==="string"?e.cwd:void 0),null;return{configCwd:s,executionCwd:s}}function $w(e){let t=e.workspaceRoot===void 0?e.cwd:e.workspaceRoot;return typeof t==="string"&&t.trim()!==""?[t]:[]}function jw(e){return typeof e==="string"&&e.trim()!==""?e:"."}var Cp=require("node:path");var Vw=new Map([["terminal","posix"]]);async function bp(){await Ie({agent:"hermes-agent",createDenyOutput:(e)=>({action:"block",message:e}),isSupported:(e)=>e.hook_event_name===dp,getToolName:(e)=>e.tool_name,getToolInput:(e,t)=>({ok:!0,input:e.tool_input,route:se(t,Vw)}),getContext:Kw,getSessionId:(e)=>e.session_id})}function Kw(e,t,n,r,o){let i=at(e,t,n,r,o);if(!i)return null;if(!t||typeof t!=="object"||Array.isArray(t))return i;if(!Object.hasOwn(t,"workdir"))return i;let s=t.workdir;if(typeof s!=="string"||s.trim()==="")return ee(r,t,n),null;let a=it([Cp.resolve(i.configCwd,s)],o.paths);if(!a)return ee(r,t,n,s),null;return{...i,executionCwd:a}}var Sp=new Map([["Bash","posix"]]);function qw(e){return se(e,Sp)}async function vp(){await Bn({agent:"kimi-code",getToolRoute:qw,getContext:(e,t,n,r,o)=>{let i=at(e,t,n,r,o);if(!i)return null;let s=e.tool_input;if(!Sp.has(n)||!s||!Object.hasOwn(s,"cwd"))return i;let a=s.cwd;if(typeof a!=="string"||a.trim()==="")return ee(r,t,n),null;let l=ut(a,[i.configCwd],o.paths);if(!l)return ee(r,t,n,a),null;return{configCwd:i.configCwd,executionCwd:l}}})}var Yw={"antigravity-cli":sp,"claude-code":mp,codex:fp,"copilot-cli":pp,cursor:gp,"gemini-cli":hp,"grok-build":yp,"hermes-agent":bp,"kimi-code":vp},cl=lp.map((e)=>({...e,run:Yw[e.id]}));function Ep(e){let t=Ur({label:"hook",booleans:Object.fromEntries(cl.map((r)=>[r.id,[...r.flags,...r.legacyFlags]]))},e);if(t.errors.length>0)return;let n=cl.filter((r)=>t.flags[r.id]);return n.length===1?n[0]:void 0}function Rp(e){return cl.find((t)=>t.legacyTopLevelFlags.some((n)=>n===e))}async function Zw(){let e=process.argv.slice(2),t=e[0],n=Ur({label:"cc-safety-net",booleans:{version:["-V","--version"]},positionals:"list"},e);if(!n.help&&!n.flags.version){if(t?.toLowerCase()==="hook"){let i=Ep(e.slice(1));if(i){await i.run();return}}let o=Rp(t);if(o){await o.run();return}}let r=await import("../cli.js");await r.runCli(e)}Zw().catch((e)=>{console.error("CC Safety Net error:",e),process.exit(1)});
|