@pinta-ai/pinta-cc 1.10.3-skax.0 → 1.10.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pinta-cc",
3
3
  "description": "Generic OTLP forwarder for Claude Code hook events. Converts hook events into OTLP/HTTP spans and sends them to any OpenTelemetry-compatible collector.",
4
- "version": "1.10.3-skax.0",
4
+ "version": "1.10.3",
5
5
  "license": "PolyForm-Noncommercial-1.0.0",
6
6
  "userConfig": {
7
7
  "endpoint": {
package/README.md CHANGED
@@ -14,12 +14,6 @@ Converts Claude Code hook events into OTLP/HTTP spans and forwards them to any O
14
14
 
15
15
  ## Channels
16
16
 
17
- Staging builds live on `staging/skax-a`, use the `skax` npm tag, and pin
18
- Core `0.9.3-skax.0`. Their masked findings distinguish returned content from
19
- completed inputs, including batch results. Consume them through an isolated
20
- staging catalog with the coordinated Manager build. Do not merge prerelease
21
- pins into `main`: marketplace auto-updates read that branch.
22
-
23
17
  | Channel | Install path | Auto-update |
24
18
  |---------|-------------|-------------|
25
19
  | **Pinta Manager v0.2+** | Manager installs and configures automatically | Yes — on manager reconcile |
package/dist/index.js CHANGED
@@ -1,32 +1,32 @@
1
- "use strict";var En=Object.create;var Ve=Object.defineProperty;var Pn=Object.getOwnPropertyDescriptor;var Sn=Object.getOwnPropertyNames;var Tn=Object.getPrototypeOf,bn=Object.prototype.hasOwnProperty;var b=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var On=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Sn(t))!bn.call(e,o)&&o!==n&&Ve(e,o,{get:()=>t[o],enumerable:!(r=Pn(t,o))||r.enumerable});return e};var h=(e,t,n)=>(n=e!=null?En(Tn(e)):{},On(t||!e||!e.__esModule?Ve(n,"default",{value:e,enumerable:!0}):n,e));var Xe=b(pe=>{"use strict";Object.defineProperty(pe,"__esModule",{value:!0});pe.mysqlPasswordRanges=Nn;var kn=new Set(["mysql","mysqldump","mysqladmin","mysqlcheck","mysqlimport","mysqlshow","mariadb","mariadb-dump","mariadb-admin","mariadb-check","mariadb-import","mariadb-show"]),An=new Set(["sh","bash","dash","zsh","ksh"]),wn=new Set(["-u","--user","-h","--host","-P","--port","-D","--database","-S","--socket","-e","--execute","--protocol","--default-character-set","--defaults-file","--defaults-extra-file","--login-path","--init-command","--ssl-ca","--ssl-capath","--ssl-cert","--ssl-key","--ssl-cipher"]),ee=16;function Ge(e,t,n=e.value.length){return{value:e.value.slice(t,n),ranges:e.ranges.slice(t,n)}}function J(e,t,n,r){e.value+=t.value.slice(n,r);for(let o=n;o<r;o++)e.ranges.push(t.ranges[o])}function ze(e){if(e?.literal)return e.value.slice(e.value.lastIndexOf("/")+1).replace(/\.exe$/,"")}function Mn(e){let t=0;for(let n=0;n<=ee;n++){for(;/^[A-Za-z_][A-Za-z0-9_]*=/.test(e[t]?.value??"");)t++;let r=ze(e[t]);if(!r)return;if(["!","if","then","elif","else","while","until","do"].includes(r)){t++;continue}let o={env:["-u","--unset","-C","--chdir"],sudo:["-u","--user","-g","--group","-p","--prompt","-D","--chdir","-R","--chroot","-C","--close-from","-T","--command-timeout"],exec:["-a"],nice:["-n","--adjustment"],timeout:["-s","--signal","-k","--kill-after"]},i={env:["-i","--ignore-environment","-0","--null"],sudo:["-n","-E","-H","-S","-b","-k"],command:["-p"],exec:["-c","-l"],nohup:[],nice:[],time:["-p"],timeout:["--foreground","--preserve-status"]};if(!(r in i))return t;for(t++;e[t]?.value.startsWith("-");){let s=e[t++].value;if(s==="--")break;if(!i[r].includes(s)){if((o[r]??[]).includes(s)){if(!e[t++])return;continue}if(!(o[r]??[]).some(a=>a.startsWith("--")?s.startsWith(a+"="):s.startsWith(a)&&s.length>2)&&!(r==="nice"&&/^-\d+$/.test(s)))return}}if(r==="timeout"&&!/^\d+(?:\.\d+)?[smhd]?$/.test(e[t++]?.value??""))return}}function Ye(e,t){let n=1,r="";for(let o=t;o<e.length;o++){let i=e[o];if(i==="\\"&&r!=="'"){o++;continue}if(r){i===r&&(r="");continue}if(i==="'"||i==='"')r=i;else if(i==="(")n++;else if(i===")"&&--n===0)return o}return e.length}function Rn(e,t,n,r){let o={value:"",ranges:[],start:t,end:t,literal:!0},i="",s=t;for(;s<e.value.length;){let a=e.value[s];if(!i&&/[\s;|&()<>{}]/.test(a))break;if(a===i){i="",s++;continue}if(!i&&(a==="'"||a==='"')){i=a,s++;continue}if(a==="\\"&&i!=="'"){let u=e.value[s+1];if(u===`
2
- `){s+=2;continue}if(u&&(!i||/[$`"\\]/.test(u))){J(o,e,s+1,s+2),s+=2;continue}}if(i!=="'"&&e.value.startsWith("$(",s)){let u=Ye(e.value,s+2);e.value[s+2]!=="("&&r<ee&&$(Ge(e,s+2,u),n,r+1),J(o,e,s,Math.min(u+1,e.value.length)),o.literal=!1,s=Math.min(u+1,e.value.length);continue}if(a==="`"&&i!=="'"){let u=s+1;for(;u<e.value.length&&e.value[u]!=="`";)u+=e.value[u]==="\\"?2:1;r<ee&&$(Ge(e,s+1,u),n,r+1),J(o,e,s,Math.min(u+1,e.value.length)),o.literal=!1,s=Math.min(u+1,e.value.length);continue}a==="$"&&i!=="'"&&(o.literal=!1),J(o,e,s,s+1),s++}return o.end=s,o}function Dn(e,t,n,r){let o=Mn(t);if(o===void 0)return;let i=ze(t[o]);if(An.has(i)&&r<ee){for(let s=o+1;s<t.length;s++){let a=t[s].value;if(a==="--command"||/^-[a-zA-Z]*c[a-zA-Z]*$/.test(a)){let u=t[s+1];u&&$(u,n,r+1);return}if(!a.startsWith("-")||a==="--")return;(a==="-o"||a==="-O")&&s++}return}if(kn.has(i))for(let s=o+1;s<t.length;s++){let a=t[s];if(a.value==="--")return;if(wn.has(a.value)){s++;continue}a.value.startsWith("-p")&&a.value.length>2&&n.push({start:e.ranges[a.start].start,end:e.ranges[a.end-1].end})}}function $(e,t,n=0){let r=[],o,i=[],s=0,a=()=>{Dn(e,r,t,n),r=[],o=void 0};for(;s<e.value.length;){let u=e.value[s];if(u===`
1
+ "use strict";var hn=Object.create;var Le=Object.defineProperty;var gn=Object.getOwnPropertyDescriptor;var _n=Object.getOwnPropertyNames;var yn=Object.getPrototypeOf,vn=Object.prototype.hasOwnProperty;var b=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var En=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of _n(t))!vn.call(e,o)&&o!==n&&Le(e,o,{get:()=>t[o],enumerable:!(r=gn(t,o))||r.enumerable});return e};var p=(e,t,n)=>(n=e!=null?hn(yn(e)):{},En(t||!e||!e.__esModule?Le(n,"default",{value:e,enumerable:!0}):n,e));var Ge=b(pe=>{"use strict";Object.defineProperty(pe,"__esModule",{value:!0});pe.mysqlPasswordRanges=wn;var Pn=new Set(["mysql","mysqldump","mysqladmin","mysqlcheck","mysqlimport","mysqlshow","mariadb","mariadb-dump","mariadb-admin","mariadb-check","mariadb-import","mariadb-show"]),Sn=new Set(["sh","bash","dash","zsh","ksh"]),Tn=new Set(["-u","--user","-h","--host","-P","--port","-D","--database","-S","--socket","-e","--execute","--protocol","--default-character-set","--defaults-file","--defaults-extra-file","--login-path","--init-command","--ssl-ca","--ssl-capath","--ssl-cert","--ssl-key","--ssl-cipher"]),W=16;function $e(e,t,n=e.value.length){return{value:e.value.slice(t,n),ranges:e.ranges.slice(t,n)}}function z(e,t,n,r){e.value+=t.value.slice(n,r);for(let o=n;o<r;o++)e.ranges.push(t.ranges[o])}function qe(e){if(e?.literal)return e.value.slice(e.value.lastIndexOf("/")+1).replace(/\.exe$/,"")}function bn(e){let t=0;for(let n=0;n<=W;n++){for(;/^[A-Za-z_][A-Za-z0-9_]*=/.test(e[t]?.value??"");)t++;let r=qe(e[t]);if(!r)return;if(["!","if","then","elif","else","while","until","do"].includes(r)){t++;continue}let o={env:["-u","--unset","-C","--chdir"],sudo:["-u","--user","-g","--group","-p","--prompt","-D","--chdir","-R","--chroot","-C","--close-from","-T","--command-timeout"],exec:["-a"],nice:["-n","--adjustment"],timeout:["-s","--signal","-k","--kill-after"]},i={env:["-i","--ignore-environment","-0","--null"],sudo:["-n","-E","-H","-S","-b","-k"],command:["-p"],exec:["-c","-l"],nohup:[],nice:[],time:["-p"],timeout:["--foreground","--preserve-status"]};if(!(r in i))return t;for(t++;e[t]?.value.startsWith("-");){let s=e[t++].value;if(s==="--")break;if(!i[r].includes(s)){if((o[r]??[]).includes(s)){if(!e[t++])return;continue}if(!(o[r]??[]).some(a=>a.startsWith("--")?s.startsWith(a+"="):s.startsWith(a)&&s.length>2)&&!(r==="nice"&&/^-\d+$/.test(s)))return}}if(r==="timeout"&&!/^\d+(?:\.\d+)?[smhd]?$/.test(e[t++]?.value??""))return}}function Fe(e,t){let n=1,r="";for(let o=t;o<e.length;o++){let i=e[o];if(i==="\\"&&r!=="'"){o++;continue}if(r){i===r&&(r="");continue}if(i==="'"||i==='"')r=i;else if(i==="(")n++;else if(i===")"&&--n===0)return o}return e.length}function On(e,t,n,r){let o={value:"",ranges:[],start:t,end:t,literal:!0},i="",s=t;for(;s<e.value.length;){let a=e.value[s];if(!i&&/[\s;|&()<>{}]/.test(a))break;if(a===i){i="",s++;continue}if(!i&&(a==="'"||a==='"')){i=a,s++;continue}if(a==="\\"&&i!=="'"){let c=e.value[s+1];if(c===`
2
+ `){s+=2;continue}if(c&&(!i||/[$`"\\]/.test(c))){z(o,e,s+1,s+2),s+=2;continue}}if(i!=="'"&&e.value.startsWith("$(",s)){let c=Fe(e.value,s+2);e.value[s+2]!=="("&&r<W&&B($e(e,s+2,c),n,r+1),z(o,e,s,Math.min(c+1,e.value.length)),o.literal=!1,s=Math.min(c+1,e.value.length);continue}if(a==="`"&&i!=="'"){let c=s+1;for(;c<e.value.length&&e.value[c]!=="`";)c+=e.value[c]==="\\"?2:1;r<W&&B($e(e,s+1,c),n,r+1),z(o,e,s,Math.min(c+1,e.value.length)),o.literal=!1,s=Math.min(c+1,e.value.length);continue}a==="$"&&i!=="'"&&(o.literal=!1),z(o,e,s,s+1),s++}return o.end=s,o}function kn(e,t,n,r){let o=bn(t);if(o===void 0)return;let i=qe(t[o]);if(Sn.has(i)&&r<W){for(let s=o+1;s<t.length;s++){let a=t[s].value;if(a==="--command"||/^-[a-zA-Z]*c[a-zA-Z]*$/.test(a)){let c=t[s+1];c&&B(c,n,r+1);return}if(!a.startsWith("-")||a==="--")return;(a==="-o"||a==="-O")&&s++}return}if(Pn.has(i))for(let s=o+1;s<t.length;s++){let a=t[s];if(a.value==="--")return;if(Tn.has(a.value)){s++;continue}a.value.startsWith("-p")&&a.value.length>2&&n.push({start:e.ranges[a.start].start,end:e.ranges[a.end-1].end})}}function B(e,t,n=0){let r=[],o,i=[],s=0,a=()=>{kn(e,r,t,n),r=[],o=void 0};for(;s<e.value.length;){let c=e.value[s];if(c===`
3
3
  `){a(),s++;for(let l of i.splice(0))for(;s<e.value.length;){let d=e.value.indexOf(`
4
- `,s),f=d<0?e.value.length:d,p=e.value.slice(s,f);if(s=d<0?f:f+1,(l.stripTabs?p.replace(/^\t+/,""):p)===l.delimiter)break}}else if(/\s/.test(u))s++;else if(u==="#"){let l=e.value.indexOf(`
5
- `,s);s=l<0?e.value.length:l}else if(e.value.startsWith("((",s))a(),s=Math.min(Ye(e.value,s+1)+1,e.value.length);else if(/[;|&(){}]/.test(u))a(),s++;else if(u==="<"||u===">")r.at(-1)?.end===s&&/^\d+$/.test(r.at(-1).value)&&r.pop(),o=/^(?:<<<|<<-?|>>|<&|>&|[<>])/.exec(e.value.slice(s))?.[0]??u,s+=o.length;else{let l=Rn(e,s,t,n);s=l.end,(o==="<<"||o==="<<-")&&i.push({delimiter:l.value,stripTabs:o==="<<-"}),o||r.push(l),o=void 0}}a()}function xn(e,t,n){let r={value:"",ranges:[]};for(let o=t+1;o<n-1;o++){if(e.value[o]!=="\\"){J(r,e,o,o+1);continue}let i=o+(e.value[o+1]==="u"?6:2),s=JSON.parse(`"${e.value.slice(o,i)}"`);r.value+=s;for(let a=0;a<s.length;a++)r.ranges.push({start:e.ranges[o].start,end:e.ranges[i-1].end});o=i-1}return r}function Nn(e){let t={value:e,ranges:Array.from({length:e.length},(r,o)=>({start:o,end:o+1}))},n=[];if(/^\s*[{[]/.test(e)){let r;try{r=JSON.parse(e)}catch{return $(t,n),n}if(r!==null&&typeof r=="object"){let o=/"(?:[^"\\]|\\.)*"/g,i;for(;i=o.exec(e);){let s=JSON.parse(i[0]);if(s!=="command"&&s!=="cmd"&&s!=="CommandLine")continue;let a=/^\s*:\s*/.exec(e.slice(o.lastIndex));if(!a)continue;let u=o.lastIndex+a[0].length;if(e[u]!=='"')continue;o.lastIndex=u;let l=o.exec(e);l?.index===u&&$(xn(t,u,u+l[0].length),n)}}return n}return $(t,n),n}});var ge=b(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.PATTERNS=y.MAX_BYTES=void 0;y.truncateTo=Je;y.truncate=Cn;y.collectMatches=We;y.resolveOverlaps=me;y.applyMatches=he;y.createDetectedValueMasker=In;y.redact=Un;var jn=Xe();y.MAX_BYTES=102400;function Je(e,t){let n=Buffer.from(e,"utf-8");return n.length<=t?e:`${n.subarray(0,Math.max(0,t)).toString("utf-8")}\u2026[TRUNCATED:${n.length}]`}function Cn(e){return Je(e,y.MAX_BYTES)}y.PATTERNS=[{type:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{type:"aws_secret_key",regex:/(?:aws[_-]?secret(?:[_-]?(?:access)?[_-]?key)?)\s*[:=]\s*["']?([A-Za-z0-9/+=]{40})(?![A-Za-z0-9/+=])/gi,captureGroup:1},{type:"gcp_service_account",regex:/\{[\s\S]{0,200}?"type"\s*:\s*"service_account"[\s\S]*?\}/g},{type:"github_token",regex:/gh[pousr]_[A-Za-z0-9]{36,}/g},{type:"gitlab_token",regex:/glpat-[A-Za-z0-9_-]{20}/g},{type:"slack_token",regex:/xox[abrsp]-[0-9A-Za-z-]{10,}/g},{type:"openai_key",regex:/sk-(?:proj-)?[A-Za-z0-9_-]{40,}/g},{type:"anthropic_key",regex:/sk-ant-[A-Za-z0-9_-]{50,}/g},{type:"stripe_key",regex:/(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/g},{type:"jwt",regex:/eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g},{type:"private_key_block",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g},{type:"bearer_token",regex:/bearer\s+([A-Za-z0-9._~+/=-]{12,})/gi,captureGroup:1},{type:"basic_auth",regex:/basic\s+([A-Za-z0-9+/=]{12,})/gi,captureGroup:1},{type:"db_url_password",regex:/\b(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|redis):\/\/[^:\s/]+:([^@\s]+)@/gi,captureGroup:1},{type:"cli_password_flag",regex:/(?:--password|--pass|--pwd)[=\s]([^\s'"]+)/g,captureGroup:1},{type:"cli_password_short",regex:/\s-p([^\s'"]+)/g,captureGroup:1,requireContext:"bash"},{type:"env_var_secret",regex:/^(?:export\s+)?([A-Z][A-Z0-9_]*(?:KEY|SECRET|TOKEN|PASSWORD|PASSWD|PWD|API_KEY)[A-Z0-9_]*)\s*=\s*["']?([^\s"'\n]+)/gm,captureGroup:2}];function We(e,t){let n=[];for(let r of y.PATTERNS){if(r.requireContext&&r.requireContext!==t.context)continue;if(r.type==="cli_password_short"){for(let{start:s,end:a}of(0,jn.mysqlPasswordRanges)(e))n.push({start:s,end:a,replaceStart:s,replaceEnd:a,type:r.type,replacement:`-p[REDACTED:${r.type}]`});continue}let o=new RegExp(r.regex.source,r.regex.flags),i;for(;(i=o.exec(e))!==null;){let s=r.captureGroup??0,a=i[s];if(a===void 0){i.index===o.lastIndex&&o.lastIndex++;continue}if(/^\[REDACTED(?::[^\]]+)?\]$/i.test(a))continue;let u=i.index,l=i.index+i[0].length,d=u+i[0].indexOf(a),f=d+a.length;n.push({start:u,end:l,replaceStart:d,replaceEnd:f,type:r.type}),i.index===o.lastIndex&&o.lastIndex++}}return n}function me(e){let t=[...e].sort((r,o)=>r.replaceStart-o.replaceStart||o.replaceEnd-r.replaceEnd),n=[];for(let r of t){let o=n[n.length-1];o&&r.replaceStart<o.replaceEnd?(o.replaceEnd=Math.max(o.replaceEnd,r.replaceEnd),o.start=Math.min(o.start,r.start),o.end=Math.max(o.end,r.end)):n.push({...r})}return n}function he(e,t){let n=[...t].sort((o,i)=>i.replaceStart-o.replaceStart),r=e;for(let o of n)r=r.slice(0,o.replaceStart)+(o.replacement??`[REDACTED:${o.type}]`)+r.slice(o.replaceEnd);return r}function In(e){let t=new Map;for(let s of e)s.value.length>0&&!t.has(s.value)&&t.set(s.value,s);let n=[...t.values()],r=n.flatMap(s=>{let a=JSON.stringify(s.value).slice(1,-1);return a===s.value?[s]:[s,{...s,value:a}]}),o=(s,a)=>{let u=[],l=[...s.matchAll(/\[(?:PINTA_)?REDACTED(?::[^\]]+)?\]/gi)];for(let d of a)for(let f=s.indexOf(d.value);f>=0;f=s.indexOf(d.value,f+1))l.some(p=>f>=p.index&&f+d.value.length<=p.index+p[0].length)||u.push({start:f,end:f+d.value.length,replaceStart:f,replaceEnd:f+d.value.length,type:d.type});return he(s,me(u))},i=s=>{if(n.length===0)return s;if(t.has(s))return o(s,n);let a=s.trimStart()[0];if(a==="{"||a==="["||a==='"'){let u=!1;try{JSON.parse(s),u=!0}catch(l){if(!(l instanceof SyntaxError))throw l}if(u)return s.replace(/"(?:\\.|[^"\\])*"|-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/gs,l=>{let d=l.startsWith('"'),f=d?JSON.parse(l):l,p=d?i(f):o(f,n);return p===f?l:JSON.stringify(p)})}return o(s,r)};return i}function Un(e,t={}){if(e.length===0)return e;let n=We(e,t);if(n.length===0)return e;let r=me(n);return he(e,r)}});var Ee=b(g=>{"use strict";var Bn=g&&g.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(g,"__esModule",{value:!0});g.MAX_SPAN_BYTES=void 0;g.ulidToTraceId=et;g.newSpanId=tt;g.snakeCase=qn;g.toOtlpValue=ot;g.attrsFromRecord=Fn;g.guardAttrs=st;g.clientAttrs=it;g.enforceSpanBudget=at;g.buildPayload=Vn;g.attachGuard=ct;g.mergeBatch=Gn;var Ln=Bn(require("crypto")),R=ge(),$n="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function et(e){if(e.length!==26)throw new Error(`ulidToTraceId: expected 26 chars, got ${e.length}`);let t=0n;for(let r of e){let o=$n.indexOf(r);if(o<0)throw new Error(`ulidToTraceId: invalid Crockford char "${r}"`);t=t<<5n|BigInt(o)}let n=(1n<<128n)-1n;return t&=n,t.toString(16).padStart(32,"0")}function tt(){return Ln.default.randomBytes(8).toString("hex")}function qn(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var Ke=new Set,ve=new WeakMap,nt=new WeakMap,rt=new WeakMap;function He(e){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch(t){if(!(t instanceof TypeError))throw t;return String(e)}}function _e(e,t,n){let r=(n.bashContextKeys??Ke).has(e)?"bash":void 0,o=(n.skipRedactKeys??Ke).has(e)?[]:(0,R.collectMatches)(t,{context:r}),i={stringValue:(0,R.truncate)((0,R.applyMatches)(t,(0,R.resolveOverlaps)(o)))};return ve.set(i,{original:t,detections:o.map(s=>({value:t.slice(s.replaceStart,s.replaceEnd),type:s.type}))}),i}function ot(e,t,n={}){if(t==null)return null;let r;switch(typeof t){case"string":r=_e(e,t,n);break;case"boolean":r={boolValue:t};break;case"number":r=Number.isInteger(t)?{intValue:t}:{doubleValue:t};break;case"object":{r=_e(e,He(t)??String(t),n);break}default:r=_e(e,String(t),n)}let o=He(n.outputForKey?.(e,t));return o!==void 0&&nt.set(r,o),r}function Fn(e,t,n={}){let r=[];for(let[o,i]of Object.entries(e)){let s=`${t}.${o}`,a=ot(s,i,n);a!==null&&r.push({key:s,value:a})}return r}function st(e){let t=[{key:"pinta.guard.decision",value:{stringValue:e.decision.toLowerCase()}},{key:"pinta.guard.duration_ms",value:{intValue:e.durationMs}}];return e.reason&&t.push({key:"pinta.guard.matched_rule",value:{stringValue:e.reason}}),e.failOpenReason&&t.push({key:"pinta.guard.fail_open_reason",value:{stringValue:e.failOpenReason}}),t}function it(e){return[{key:"pinta.client.rtt_ms",value:Number.isInteger(e.rttMs)?{intValue:e.rttMs}:{doubleValue:e.rttMs}},{key:"pinta.client.op",value:{stringValue:e.op}}]}g.MAX_SPAN_BYTES=800*1024;function Ze(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var Qe=1024;function at(e,t=g.MAX_SPAN_BYTES){let n=Ze(e);for(let r=0;r<100&&n>t;r++){let o=null,i=0;for(let u of e.attributes){if(!("stringValue"in u.value))continue;let l=Buffer.byteLength(u.value.stringValue,"utf-8");l>i&&(i=l,o=u.value)}if(o===null||i<=Qe)break;let s=n-t,a=Math.max(Qe,i-s-64);o.stringValue=(0,R.truncateTo)(o.stringValue,a),n=Ze(e)}return e}function Vn(e){let t=e.now??Date.now(),n=(BigInt(t)*1000000n).toString(),o=[...e.resource,...e.attributes].flatMap(f=>{let p=ve.get(f.value);return p?[p]:[]}).flatMap(f=>f.detections),i=[...e.resource,...e.attributes].flatMap(f=>{let p=nt.get(f.value);return p===void 0?[]:[p]}),s=new Set(o.filter(f=>{let p=(0,R.createDetectedValueMasker)([f]);return i.some(A=>p(A)!==A)}).map(f=>f.value)),a=(0,R.createDetectedValueMasker)(o),u=e.attributes.map(f=>ye(f,a)),l={traceId:et(e.traceId),spanId:tt(),name:a(e.spanName),kind:e.spanKind??1,startTimeUnixNano:n,endTimeUnixNano:n,attributes:u},d={resourceSpans:[{resource:{attributes:e.resource.map(f=>ye(f,a))},scopeSpans:[{scope:{name:a(e.scope.name),version:a(e.scope.version)},spans:[l]}]}]};return o.length>0&&(rt.set(d,a),u.push({key:"pinta.facts",value:{stringValue:JSON.stringify({items:[{origin:"attributes",values:o.filter(f=>!s.has(f.value))},{origin:"toolOutput",values:o.filter(f=>s.has(f.value))}].filter(f=>f.values.length>0).map(({origin:f,values:p})=>({category:"DATA_EXFILTRATION",source:"CORE_REDACT",path:"$",secrets:{kinds:["credential"],count:new Set(p.map(A=>A.value)).size,origins:[f],scannedFields:["attributes"],scanner:"core-tier1",truncated:!1,corroboration:["pattern"]}}))})}})),at(l),ct(d,e.guard,e.clientTiming)}function ye(e,t){let n={key:t(e.key),value:{...e.value}},r=n.value;if("stringValue"in r){let o=ve.get(e.value),i=t(o?.original??r.stringValue);r.stringValue=o?(0,R.truncate)(i):i}else if("intValue"in r||"doubleValue"in r){let o=String("intValue"in r?r.intValue:r.doubleValue),i=t(o);i!==o&&(n.value={stringValue:i})}return n}function ct(e,t,n){let r=e.resourceSpans[0]?.scopeSpans[0]?.spans[0];if(!r)return e;if(t){let i=st(t),s=rt.get(e);r.attributes.push(...s?i.map(a=>ye(a,s)):i)}let o=n??(t?.clientRttMs!==void 0?{op:"guard",rttMs:t.clientRttMs}:null);return o&&r.attributes.push(...it(o)),e}function Gn(e){let t=[];for(let n of e)t.push(...n.resourceSpans);return{resourceSpans:t}}});var lt=b(w=>{"use strict";Object.defineProperty(w,"__esModule",{value:!0});w.GUARD_STATUS_REFUSED=w.GUARD_BUDGET_HEADER=void 0;w.evaluateGuard=Jn;var zn=1e4,Yn="pinta-core";w.GUARD_BUDGET_HEADER="x-pinta-guard-budget-ms";function W(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var Xn=new Set(["ALLOW","DENY","REVIEW"]);function ut(e){return e==="timeout"||e==="refused"||e==="error"}w.GUARD_STATUS_REFUSED=410;async function Jn(e,t,n={}){if(!t||n.disabled)return null;let r=n.timeoutMs??zn,o=Date.now(),i=new AbortController,s=setTimeout(()=>i.abort(),r);try{let a=await fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":n.userAgent??Yn,"x-pinta-relay-token":n.token??"",...n.agentType?{"x-pinta-agent-type":n.agentType}:{},...Number.isFinite(r)&&r>0?{[w.GUARD_BUDGET_HEADER]:String(r)}:{}},body:JSON.stringify(e),signal:i.signal});if(a.status===w.GUARD_STATUS_REFUSED)return W(Date.now()-o,"refused");if(a.status!==200)return W(Date.now()-o,"error");let u=await a.json(),l=u?.durationMs===void 0||typeof u.durationMs=="number"&&Number.isFinite(u.durationMs);if(!u||!Xn.has(u.decision)||!l)return W(Date.now()-o,"error");let d=u.decision==="ALLOW"?u.failOpenReason:void 0;if(d!=null&&!ut(d))return W(Date.now()-o,"error");let f=Date.now()-o;return{decision:u.decision,reason:u.reason??null,userMessage:u.userMessage??null,durationMs:u.durationMs??f,clientRttMs:f,...ut(d)?{failOpenReason:d}:{}}}catch(a){let u=a.name,l=u==="AbortError"||u==="TimeoutError"?"timeout":"error";return W(Date.now()-o,l)}finally{clearTimeout(s)}}});var te=b(K=>{"use strict";var Wn=K&&K.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(K,"__esModule",{value:!0});K.atomicWriteFileSync=Kn;var ft=Wn(require("fs"));function Kn(e,t){let n=`${e}.${process.pid}.tmp`;ft.default.writeFileSync(n,t),ft.default.renameSync(n,e)}});var Te=b(D=>{"use strict";var dt=D&&D.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(D,"__esModule",{value:!0});D.MemoryRetryQueue=D.DiskRetryQueue=void 0;var v=dt(require("fs")),ne=dt(require("path")),Hn=te(),re=1e3,Zn=50,Qn=5,Pe=class{filePath;lockPath;logPrefix;constructor(t,n){this.filePath=ne.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=n}enqueue(t){try{v.default.mkdirSync(ne.default.dirname(this.filePath),{recursive:!0});let n=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
6
- `;v.default.appendFileSync(this.filePath,n),this.trim()}catch(n){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${n}
7
- `)}}readAll(){try{let t=v.default.readFileSync(this.filePath,"utf-8"),n=[];for(let r of t.split(`
8
- `))if(r.trim())try{let o=JSON.parse(r);Array.isArray(o?.payload?.resourceSpans)&&n.push(o)}catch{}return n}catch{return[]}}rewrite(t){try{if(t.length===0){v.default.existsSync(this.filePath)&&v.default.unlinkSync(this.filePath);return}v.default.mkdirSync(ne.default.dirname(this.filePath),{recursive:!0}),(0,Hn.atomicWriteFileSync)(this.filePath,t.map(n=>JSON.stringify(n)).join(`
4
+ `,s),y=d<0?e.value.length:d,v=e.value.slice(s,y);if(s=d<0?y:y+1,(l.stripTabs?v.replace(/^\t+/,""):v)===l.delimiter)break}}else if(/\s/.test(c))s++;else if(c==="#"){let l=e.value.indexOf(`
5
+ `,s);s=l<0?e.value.length:l}else if(e.value.startsWith("((",s))a(),s=Math.min(Fe(e.value,s+1)+1,e.value.length);else if(/[;|&(){}]/.test(c))a(),s++;else if(c==="<"||c===">")r.at(-1)?.end===s&&/^\d+$/.test(r.at(-1).value)&&r.pop(),o=/^(?:<<<|<<-?|>>|<&|>&|[<>])/.exec(e.value.slice(s))?.[0]??c,s+=o.length;else{let l=On(e,s,t,n);s=l.end,(o==="<<"||o==="<<-")&&i.push({delimiter:l.value,stripTabs:o==="<<-"}),o||r.push(l),o=void 0}}a()}function An(e,t,n){let r={value:"",ranges:[]};for(let o=t+1;o<n-1;o++){if(e.value[o]!=="\\"){z(r,e,o,o+1);continue}let i=o+(e.value[o+1]==="u"?6:2),s=JSON.parse(`"${e.value.slice(o,i)}"`);r.value+=s;for(let a=0;a<s.length;a++)r.ranges.push({start:e.ranges[o].start,end:e.ranges[i-1].end});o=i-1}return r}function wn(e){let t={value:e,ranges:Array.from({length:e.length},(r,o)=>({start:o,end:o+1}))},n=[];if(/^\s*[{[]/.test(e)){let r;try{r=JSON.parse(e)}catch{return B(t,n),n}if(r!==null&&typeof r=="object"){let o=/"(?:[^"\\]|\\.)*"/g,i;for(;i=o.exec(e);){let s=JSON.parse(i[0]);if(s!=="command"&&s!=="cmd"&&s!=="CommandLine")continue;let a=/^\s*:\s*/.exec(e.slice(o.lastIndex));if(!a)continue;let c=o.lastIndex+a[0].length;if(e[c]!=='"')continue;o.lastIndex=c;let l=o.exec(e);l?.index===c&&B(An(t,c,c+l[0].length),n)}}return n}return B(t,n),n}});var me=b(g=>{"use strict";Object.defineProperty(g,"__esModule",{value:!0});g.PATTERNS=g.MAX_BYTES=void 0;g.truncateTo=Ve;g.truncate=Mn;g.collectMatches=Ye;g.resolveOverlaps=ze;g.applyMatches=Xe;g.redact=Dn;var Rn=Ge();g.MAX_BYTES=102400;function Ve(e,t){let n=Buffer.from(e,"utf-8");return n.length<=t?e:`${n.subarray(0,Math.max(0,t)).toString("utf-8")}\u2026[TRUNCATED:${n.length}]`}function Mn(e){return Ve(e,g.MAX_BYTES)}g.PATTERNS=[{type:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{type:"aws_secret_key",regex:/(?:aws[_-]?secret(?:[_-]?(?:access)?[_-]?key)?)\s*[:=]\s*["']?([A-Za-z0-9/+=]{40})(?![A-Za-z0-9/+=])/gi,captureGroup:1},{type:"gcp_service_account",regex:/\{[\s\S]{0,200}?"type"\s*:\s*"service_account"[\s\S]*?\}/g},{type:"github_token",regex:/gh[pousr]_[A-Za-z0-9]{36,}/g},{type:"gitlab_token",regex:/glpat-[A-Za-z0-9_-]{20}/g},{type:"slack_token",regex:/xox[abrsp]-[0-9A-Za-z-]{10,}/g},{type:"openai_key",regex:/sk-(?:proj-)?[A-Za-z0-9_-]{40,}/g},{type:"anthropic_key",regex:/sk-ant-[A-Za-z0-9_-]{50,}/g},{type:"stripe_key",regex:/(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/g},{type:"jwt",regex:/eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g},{type:"private_key_block",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g},{type:"bearer_token",regex:/bearer\s+([A-Za-z0-9._~+/=-]{12,})/gi,captureGroup:1},{type:"basic_auth",regex:/basic\s+([A-Za-z0-9+/=]{12,})/gi,captureGroup:1},{type:"db_url_password",regex:/\b(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|redis):\/\/[^:\s/]+:([^@\s]+)@/gi,captureGroup:1},{type:"cli_password_flag",regex:/(?:--password|--pass|--pwd)[=\s]([^\s'"]+)/g,captureGroup:1},{type:"cli_password_short",regex:/\s-p([^\s'"]+)/g,captureGroup:1,requireContext:"bash"},{type:"env_var_secret",regex:/^(?:export\s+)?([A-Z][A-Z0-9_]*(?:KEY|SECRET|TOKEN|PASSWORD|PASSWD|PWD|API_KEY)[A-Z0-9_]*)\s*=\s*["']?([^\s"'\n]+)/gm,captureGroup:2}];function Ye(e,t){let n=[];for(let r of g.PATTERNS){if(r.requireContext&&r.requireContext!==t.context)continue;if(r.type==="cli_password_short"){for(let{start:s,end:a}of(0,Rn.mysqlPasswordRanges)(e))n.push({start:s,end:a,replaceStart:s,replaceEnd:a,type:r.type,replacement:`-p[REDACTED:${r.type}]`});continue}let o=new RegExp(r.regex.source,r.regex.flags),i;for(;(i=o.exec(e))!==null;){let s=r.captureGroup??0,a=i[s];if(a===void 0){i.index===o.lastIndex&&o.lastIndex++;continue}let c=i.index,l=i.index+i[0].length,d=c+i[0].indexOf(a),y=d+a.length;n.push({start:c,end:l,replaceStart:d,replaceEnd:y,type:r.type}),i.index===o.lastIndex&&o.lastIndex++}}return n}function ze(e){let t=[...e].sort((o,i)=>o.start!==i.start?o.start-i.start:i.end-i.start-(o.end-o.start)),n=[],r=-1;for(let o of t)o.start<r||(n.push(o),r=o.end);return n}function Xe(e,t){let n=[...t].sort((o,i)=>i.replaceStart-o.replaceStart),r=e;for(let o of n)r=r.slice(0,o.replaceStart)+(o.replacement??`[REDACTED:${o.type}]`)+r.slice(o.replaceEnd);return r}function Dn(e,t={}){if(e.length===0)return e;let n=Ye(e,t);if(n.length===0)return e;let r=ze(n);return Xe(e,r)}});var ge=b(m=>{"use strict";var xn=m&&m.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(m,"__esModule",{value:!0});m.MAX_SPAN_BYTES=void 0;m.ulidToTraceId=Je;m.newSpanId=We;m.snakeCase=In;m.toOtlpValue=Qe;m.attrsFromRecord=Cn;m.guardAttrs=et;m.clientAttrs=tt;m.enforceSpanBudget=nt;m.buildPayload=Un;m.attachGuard=rt;m.mergeBatch=Bn;var Nn=xn(require("crypto")),he=me(),jn="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Je(e){if(e.length!==26)throw new Error(`ulidToTraceId: expected 26 chars, got ${e.length}`);let t=0n;for(let r of e){let o=jn.indexOf(r);if(o<0)throw new Error(`ulidToTraceId: invalid Crockford char "${r}"`);t=t<<5n|BigInt(o)}let n=(1n<<128n)-1n;return t&=n,t.toString(16).padStart(32,"0")}function We(){return Nn.default.randomBytes(8).toString("hex")}function In(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var He=new Set;function Q(e,t,n){let r=(0,he.truncate)(t);if((n.skipRedactKeys??He).has(e))return r;let o=(n.bashContextKeys??He).has(e)?"bash":void 0;return(0,he.redact)(r,{context:o})}function Qe(e,t,n={}){if(t==null)return null;switch(typeof t){case"string":return{stringValue:Q(e,t,n)};case"boolean":return{boolValue:t};case"number":return Number.isInteger(t)?{intValue:t}:{doubleValue:t};case"object":try{return{stringValue:Q(e,JSON.stringify(t),n)}}catch{return{stringValue:Q(e,String(t),n)}}default:return{stringValue:Q(e,String(t),n)}}}function Cn(e,t,n={}){let r=[];for(let[o,i]of Object.entries(e)){let s=`${t}.${o}`,a=Qe(s,i,n);a!==null&&r.push({key:s,value:a})}return r}function et(e){let t=[{key:"pinta.guard.decision",value:{stringValue:e.decision.toLowerCase()}},{key:"pinta.guard.duration_ms",value:{intValue:e.durationMs}}];return e.reason&&t.push({key:"pinta.guard.matched_rule",value:{stringValue:e.reason}}),e.failOpenReason&&t.push({key:"pinta.guard.fail_open_reason",value:{stringValue:e.failOpenReason}}),t}function tt(e){return[{key:"pinta.client.rtt_ms",value:Number.isInteger(e.rttMs)?{intValue:e.rttMs}:{doubleValue:e.rttMs}},{key:"pinta.client.op",value:{stringValue:e.op}}]}m.MAX_SPAN_BYTES=800*1024;function Ke(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var Ze=1024;function nt(e,t=m.MAX_SPAN_BYTES){let n=Ke(e);for(let r=0;r<100&&n>t;r++){let o=null,i=0;for(let c of e.attributes){if(!("stringValue"in c.value))continue;let l=Buffer.byteLength(c.value.stringValue,"utf-8");l>i&&(i=l,o=c.value)}if(o===null||i<=Ze)break;let s=n-t,a=Math.max(Ze,i-s-64);o.stringValue=(0,he.truncateTo)(o.stringValue,a),n=Ke(e)}return e}function Un(e){let t=e.now??Date.now(),n=(BigInt(t)*1000000n).toString(),r=[...e.attributes],o={traceId:Je(e.traceId),spanId:We(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:n,endTimeUnixNano:n,attributes:r};nt(o);let i={resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[o]}]}]};return rt(i,e.guard,e.clientTiming)}function rt(e,t,n){let r=e.resourceSpans[0]?.scopeSpans[0]?.spans[0];if(!r)return e;t&&r.attributes.push(...et(t));let o=n??(t?.clientRttMs!==void 0?{op:"guard",rttMs:t.clientRttMs}:null);return o&&r.attributes.push(...tt(o)),e}function Bn(e){let t=[];for(let n of e)t.push(...n.resourceSpans);return{resourceSpans:t}}});var ot=b(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.GUARD_STATUS_REFUSED=A.GUARD_BUDGET_HEADER=void 0;A.evaluateGuard=Fn;var Ln=1e4,$n="pinta-core";A.GUARD_BUDGET_HEADER="x-pinta-guard-budget-ms";function ee(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var qn=new Set(["ALLOW","DENY","REVIEW"]);A.GUARD_STATUS_REFUSED=410;async function Fn(e,t,n={}){if(!t||n.disabled)return null;let r=n.timeoutMs??Ln,o=Date.now(),i=new AbortController,s=setTimeout(()=>i.abort(),r);try{let a=await fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":n.userAgent??$n,"x-pinta-relay-token":n.token??"",...n.agentType?{"x-pinta-agent-type":n.agentType}:{},...Number.isFinite(r)&&r>0?{[A.GUARD_BUDGET_HEADER]:String(r)}:{}},body:JSON.stringify(e),signal:i.signal});if(a.status===A.GUARD_STATUS_REFUSED)return ee(Date.now()-o,"refused");if(a.status!==200)return ee(Date.now()-o,"error");let c=await a.json(),l=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!qn.has(c.decision)||!l)return ee(Date.now()-o,"error");let d=Date.now()-o;return{decision:c.decision,reason:c.reason??null,userMessage:c.userMessage??null,durationMs:c.durationMs??d,clientRttMs:d}}catch(a){let c=a.name,l=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return ee(Date.now()-o,l)}finally{clearTimeout(s)}}});var te=b(X=>{"use strict";var Gn=X&&X.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(X,"__esModule",{value:!0});X.atomicWriteFileSync=Vn;var st=Gn(require("fs"));function Vn(e,t){let n=`${e}.${process.pid}.tmp`;st.default.writeFileSync(n,t),st.default.renameSync(n,e)}});var ve=b(R=>{"use strict";var it=R&&R.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(R,"__esModule",{value:!0});R.MemoryRetryQueue=R.DiskRetryQueue=void 0;var _=it(require("fs")),ne=it(require("path")),Yn=te(),re=1e3,zn=50,Xn=5,_e=class{filePath;lockPath;logPrefix;constructor(t,n){this.filePath=ne.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=n}enqueue(t){try{_.default.mkdirSync(ne.default.dirname(this.filePath),{recursive:!0});let n=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
6
+ `;_.default.appendFileSync(this.filePath,n),this.trim()}catch(n){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${n}
7
+ `)}}readAll(){try{let t=_.default.readFileSync(this.filePath,"utf-8"),n=[];for(let r of t.split(`
8
+ `))if(r.trim())try{let o=JSON.parse(r);Array.isArray(o?.payload?.resourceSpans)&&n.push(o)}catch{}return n}catch{return[]}}rewrite(t){try{if(t.length===0){_.default.existsSync(this.filePath)&&_.default.unlinkSync(this.filePath);return}_.default.mkdirSync(ne.default.dirname(this.filePath),{recursive:!0}),(0,Yn.atomicWriteFileSync)(this.filePath,t.map(n=>JSON.stringify(n)).join(`
9
9
  `)+`
10
10
  `)}catch(n){process.stderr.write(`[${this.logPrefix}] retry-queue rewrite failed: ${n}
11
- `)}}tryAcquireLock(){let t=Date.now();try{v.default.mkdirSync(ne.default.dirname(this.lockPath),{recursive:!0})}catch(n){return process.stderr.write(`[${this.logPrefix}] retry-queue lock mkdir failed: ${n}
12
- `),!1}for(;Date.now()-t<Zn;)try{let n=v.default.openSync(this.lockPath,"wx");return v.default.writeSync(n,String(process.pid)),v.default.closeSync(n),!0}catch(n){if(n?.code!=="EEXIST")return process.stderr.write(`[${this.logPrefix}] retry-queue lock open failed: ${n}
13
- `),!1;try{let i=v.default.statSync(this.lockPath);if(Date.now()-i.mtimeMs>3e4){v.default.unlinkSync(this.lockPath);continue}}catch{}let r=Qn,o=Date.now()+r;for(;Date.now()<o;);}return!1}release(){try{v.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=re)return;let n=t.length-re;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${n} oldest entries
14
- `),this.rewrite(t.slice(n))}};D.DiskRetryQueue=Pe;var Se=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>re&&this.entries.splice(0,this.entries.length-re)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};D.MemoryRetryQueue=Se});var yt=b(m=>{"use strict";Object.defineProperty(m,"__esModule",{value:!0});m.MemoryTransport=m.DiskTransport=m.MAX_POST_BYTES=void 0;m.parseHeadersEnv=gt;m.envOptionsResolver=_t;m.postOtlp=H;var pt=Te(),mt=Ee(),er=5e3;m.MAX_POST_BYTES=900*1024;function oe(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function ht(e,t,n){let r=[],o=[],i=[],s=0;for(let a of e){let u=t(a);if(u>n){o.push(a);continue}i.length>0&&s+u>n&&(r.push(i),i=[],s=0),i.push(a),s+=u}return i.length>0&&r.push(i),{chunks:r,oversize:o}}function gt(e){if(!e)return{};if(typeof e=="object")return{...e};let t={};for(let n of e.split(",")){let[r,...o]=n.split("=");r&&o.length>0&&(t[r.trim()]=o.join("=").trim())}return t}function _t(){let e=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,n;return e?n=e.replace(/\/+$/,""):t&&(n=t.replace(/\/+$/,"")+"/v1/traces"),n?{endpoint:n,headers:gt(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function H(e,t,n){let r=new AbortController,o=setTimeout(()=>r.abort(),er);try{let i=await fetch(t.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(e),signal:r.signal});if(!i.ok){let s="";try{s=(await i.text()).slice(0,200)}catch{}let a=i.status===401||i.status===403?" \u2014 check OTEL_EXPORTER_OTLP_HEADERS (relay token)":i.status===404?" \u2014 check OTEL_EXPORTER_OTLP_TRACES_ENDPOINT path":i.status>=500?" \u2014 collector may be down":"";return process.stderr.write(`[${n}] OTLP POST ${i.status} ${t.endpoint}${a}${s?` body=${s}`:""}
11
+ `)}}tryAcquireLock(){let t=Date.now();try{_.default.mkdirSync(ne.default.dirname(this.lockPath),{recursive:!0})}catch(n){return process.stderr.write(`[${this.logPrefix}] retry-queue lock mkdir failed: ${n}
12
+ `),!1}for(;Date.now()-t<zn;)try{let n=_.default.openSync(this.lockPath,"wx");return _.default.writeSync(n,String(process.pid)),_.default.closeSync(n),!0}catch(n){if(n?.code!=="EEXIST")return process.stderr.write(`[${this.logPrefix}] retry-queue lock open failed: ${n}
13
+ `),!1;try{let i=_.default.statSync(this.lockPath);if(Date.now()-i.mtimeMs>3e4){_.default.unlinkSync(this.lockPath);continue}}catch{}let r=Xn,o=Date.now()+r;for(;Date.now()<o;);}return!1}release(){try{_.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=re)return;let n=t.length-re;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${n} oldest entries
14
+ `),this.rewrite(t.slice(n))}};R.DiskRetryQueue=_e;var ye=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>re&&this.entries.splice(0,this.entries.length-re)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};R.MemoryRetryQueue=ye});var ft=b(f=>{"use strict";Object.defineProperty(f,"__esModule",{value:!0});f.MemoryTransport=f.DiskTransport=f.MAX_POST_BYTES=void 0;f.parseHeadersEnv=lt;f.envOptionsResolver=dt;f.postOtlp=H;var at=ve(),ut=ge(),Hn=5e3;f.MAX_POST_BYTES=900*1024;function oe(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function ct(e,t,n){let r=[],o=[],i=[],s=0;for(let a of e){let c=t(a);if(c>n){o.push(a);continue}i.length>0&&s+c>n&&(r.push(i),i=[],s=0),i.push(a),s+=c}return i.length>0&&r.push(i),{chunks:r,oversize:o}}function lt(e){if(!e)return{};if(typeof e=="object")return{...e};let t={};for(let n of e.split(",")){let[r,...o]=n.split("=");r&&o.length>0&&(t[r.trim()]=o.join("=").trim())}return t}function dt(){let e=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,n;return e?n=e.replace(/\/+$/,""):t&&(n=t.replace(/\/+$/,"")+"/v1/traces"),n?{endpoint:n,headers:lt(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function H(e,t,n){let r=new AbortController,o=setTimeout(()=>r.abort(),Hn);try{let i=await fetch(t.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(e),signal:r.signal});if(!i.ok){let s="";try{s=(await i.text()).slice(0,200)}catch{}let a=i.status===401||i.status===403?" \u2014 check OTEL_EXPORTER_OTLP_HEADERS (relay token)":i.status===404?" \u2014 check OTEL_EXPORTER_OTLP_TRACES_ENDPOINT path":i.status>=500?" \u2014 collector may be down":"";return process.stderr.write(`[${n}] OTLP POST ${i.status} ${t.endpoint}${a}${s?` body=${s}`:""}
15
15
  `),!1}return!0}catch(i){return process.stderr.write(`[${n}] OTLP POST failed: ${i.message??String(i)}
16
- `),!1}finally{clearTimeout(o)}}var be=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new pt.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??_t}async send(t){let n=this.resolveOptions();if(!n||this.dropIfOversized(t))return;await H(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(t&&this.queue.tryAcquireLock())try{let n=this.queue.readAll();if(n.length===0)return;let{chunks:r,oversize:o}=ht(n,a=>oe(a.payload),m.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized retry ${o.length===1?"entry":"entries"} (each > ${m.MAX_POST_BYTES} bytes \u2014 the backend caps the request body, so they can never be delivered)
17
- `);let i=[].concat(...r),s=0;for(let a of r){if(!await H((0,mt.mergeBatch)(a.map(l=>l.payload)),t,this.logPrefix))break;s+=a.length}this.queue.rewrite(i.slice(s))}catch(n){process.stderr.write(`[${this.logPrefix}] flush failed: ${n?.message??String(n)}
18
- `)}finally{this.queue.release()}}dropIfOversized(t){let n=oe(t);return n<=m.MAX_POST_BYTES?!1:(process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (${n} > ${m.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
19
- `),!0)}};m.DiskTransport=be;var Oe=class{queue=new pt.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let n=this.resolveOptions();if(!n)return;if(oe(t)>m.MAX_POST_BYTES){process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (> ${m.MAX_POST_BYTES} bytes) \u2014 undeliverable, not buffered
20
- `);return}await H(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(!t)return;let n=this.queue.drain();if(n.length===0)return;let{chunks:r,oversize:o}=ht(n,oe,m.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${m.MAX_POST_BYTES} bytes \u2014 undeliverable)
21
- `);let i=[].concat(...r),s=0;for(let a of r){if(!await H((0,mt.mergeBatch)(a),t,this.logPrefix))break;s+=a.length}for(let a of i.slice(s))this.queue.enqueue(a)}};m.MemoryTransport=Oe});var Me=b(C=>{"use strict";var we=C&&C.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(C,"__esModule",{value:!0});C.TraceManager=void 0;C.generateUlid=Et;var vt=we(require("fs")),tr=we(require("path")),nr=we(require("crypto")),rr=te(),ke="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Et(){let e=Date.now(),t="",n=e;for(let i=0;i<10;i++)t=ke[n&31]+t,n=Math.floor(n/32);let r=nr.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=ke[r[i]&31];for(;o.length<16;)o+=ke[0];return t+o}var Ae=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=Et();return this.save(t),t}currentTrace(){try{let t=vt.default.readFileSync(this.tracePath,"utf-8"),{traceId:n}=JSON.parse(t);if(n)return n}catch{}return this.newTrace()}save(t){try{vt.default.mkdirSync(tr.default.dirname(this.tracePath),{recursive:!0}),(0,rr.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(n){process.stderr.write(`[pinta-core] trace persistence failed: ${n}
22
- `)}}};C.TraceManager=Ae});var Ot=b(x=>{"use strict";var St=x&&x.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(x,"__esModule",{value:!0});x.MemorySessionTraceManager=x.DiskSessionTraceManager=void 0;var Pt=St(require("fs")),or=St(require("path")),Tt=Me(),sr=te(),bt=200,Re=class{tracePath;maxSessions;constructor(t,n={}){this.tracePath=t,this.maxSessions=n.maxSessions??bt}read(){try{let t=JSON.parse(Pt.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{Pt.default.mkdirSync(or.default.dirname(this.tracePath),{recursive:!0});let n=Object.entries(t),r=n.length>this.maxSessions?Object.fromEntries(n.slice(-this.maxSessions)):t;(0,sr.atomicWriteFileSync)(this.tracePath,JSON.stringify(r))}catch{}}newTrace(t){let n=t||"default",r=(0,Tt.generateUlid)(),o=this.read();return o[n]=r,this.write(o),r}currentTrace(t){let n=t||"default",r=this.read()[n];return r||this.newTrace(n)}};x.DiskSessionTraceManager=Re;var De=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??bt}newTrace(t){let n=t||"default",r=(0,Tt.generateUlid)();if(this.map.set(n,r),this.map.size>this.maxSessions){let o=this.map.keys().next().value;o!==void 0&&this.map.delete(o)}return r}currentTrace(t){let n=t||"default";return this.map.get(n)??this.newTrace(n)}};x.MemorySessionTraceManager=De});var wt=b(I=>{"use strict";var xe=I&&I.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(I,"__esModule",{value:!0});I.envFilePath=cr;I.parseEnvFile=At;I.loadEnvFile=ur;var ir=xe(require("node:fs")),ar=xe(require("node:os")),kt=xe(require("node:path"));function cr(e,t,n){let r=n?process.env[n]:void 0,o=r&&r.length>0?r:kt.default.join(ar.default.homedir(),e);return kt.default.join(o,t)}function At(e){let t={};for(let n of e.split(`
23
- `)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.indexOf("=");if(o<0)continue;let i=r.slice(0,o).trim(),s=r.slice(o+1).trim();(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),i&&(t[i]=s)}return t}function ur(e){let t;try{t=ir.default.readFileSync(e,"utf-8")}catch{return}let n=At(t);for(let[r,o]of Object.entries(n))process.env[r]===void 0&&(process.env[r]=o)}});var O=b(c=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});c.loadEnvFile=c.parseEnvFile=c.envFilePath=c.MemorySessionTraceManager=c.DiskSessionTraceManager=c.generateUlid=c.TraceManager=c.MAX_POST_BYTES=c.parseHeadersEnv=c.envOptionsResolver=c.postOtlp=c.MemoryTransport=c.DiskTransport=c.MemoryRetryQueue=c.DiskRetryQueue=c.GUARD_BUDGET_HEADER=c.GUARD_STATUS_REFUSED=c.evaluateGuard=c.MAX_SPAN_BYTES=c.enforceSpanBudget=c.mergeBatch=c.attachGuard=c.buildPayload=c.clientAttrs=c.guardAttrs=c.attrsFromRecord=c.toOtlpValue=c.snakeCase=c.newSpanId=c.ulidToTraceId=c.MAX_BYTES=c.PATTERNS=c.applyMatches=c.resolveOverlaps=c.collectMatches=c.truncateTo=c.truncate=c.redact=void 0;var N=ge();Object.defineProperty(c,"redact",{enumerable:!0,get:function(){return N.redact}});Object.defineProperty(c,"truncate",{enumerable:!0,get:function(){return N.truncate}});Object.defineProperty(c,"truncateTo",{enumerable:!0,get:function(){return N.truncateTo}});Object.defineProperty(c,"collectMatches",{enumerable:!0,get:function(){return N.collectMatches}});Object.defineProperty(c,"resolveOverlaps",{enumerable:!0,get:function(){return N.resolveOverlaps}});Object.defineProperty(c,"applyMatches",{enumerable:!0,get:function(){return N.applyMatches}});Object.defineProperty(c,"PATTERNS",{enumerable:!0,get:function(){return N.PATTERNS}});Object.defineProperty(c,"MAX_BYTES",{enumerable:!0,get:function(){return N.MAX_BYTES}});var E=Ee();Object.defineProperty(c,"ulidToTraceId",{enumerable:!0,get:function(){return E.ulidToTraceId}});Object.defineProperty(c,"newSpanId",{enumerable:!0,get:function(){return E.newSpanId}});Object.defineProperty(c,"snakeCase",{enumerable:!0,get:function(){return E.snakeCase}});Object.defineProperty(c,"toOtlpValue",{enumerable:!0,get:function(){return E.toOtlpValue}});Object.defineProperty(c,"attrsFromRecord",{enumerable:!0,get:function(){return E.attrsFromRecord}});Object.defineProperty(c,"guardAttrs",{enumerable:!0,get:function(){return E.guardAttrs}});Object.defineProperty(c,"clientAttrs",{enumerable:!0,get:function(){return E.clientAttrs}});Object.defineProperty(c,"buildPayload",{enumerable:!0,get:function(){return E.buildPayload}});Object.defineProperty(c,"attachGuard",{enumerable:!0,get:function(){return E.attachGuard}});Object.defineProperty(c,"mergeBatch",{enumerable:!0,get:function(){return E.mergeBatch}});Object.defineProperty(c,"enforceSpanBudget",{enumerable:!0,get:function(){return E.enforceSpanBudget}});Object.defineProperty(c,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return E.MAX_SPAN_BYTES}});var Ne=lt();Object.defineProperty(c,"evaluateGuard",{enumerable:!0,get:function(){return Ne.evaluateGuard}});Object.defineProperty(c,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return Ne.GUARD_STATUS_REFUSED}});Object.defineProperty(c,"GUARD_BUDGET_HEADER",{enumerable:!0,get:function(){return Ne.GUARD_BUDGET_HEADER}});var Mt=Te();Object.defineProperty(c,"DiskRetryQueue",{enumerable:!0,get:function(){return Mt.DiskRetryQueue}});Object.defineProperty(c,"MemoryRetryQueue",{enumerable:!0,get:function(){return Mt.MemoryRetryQueue}});var q=yt();Object.defineProperty(c,"DiskTransport",{enumerable:!0,get:function(){return q.DiskTransport}});Object.defineProperty(c,"MemoryTransport",{enumerable:!0,get:function(){return q.MemoryTransport}});Object.defineProperty(c,"postOtlp",{enumerable:!0,get:function(){return q.postOtlp}});Object.defineProperty(c,"envOptionsResolver",{enumerable:!0,get:function(){return q.envOptionsResolver}});Object.defineProperty(c,"parseHeadersEnv",{enumerable:!0,get:function(){return q.parseHeadersEnv}});Object.defineProperty(c,"MAX_POST_BYTES",{enumerable:!0,get:function(){return q.MAX_POST_BYTES}});var Rt=Me();Object.defineProperty(c,"TraceManager",{enumerable:!0,get:function(){return Rt.TraceManager}});Object.defineProperty(c,"generateUlid",{enumerable:!0,get:function(){return Rt.generateUlid}});var Dt=Ot();Object.defineProperty(c,"DiskSessionTraceManager",{enumerable:!0,get:function(){return Dt.DiskSessionTraceManager}});Object.defineProperty(c,"MemorySessionTraceManager",{enumerable:!0,get:function(){return Dt.MemorySessionTraceManager}});var je=wt();Object.defineProperty(c,"envFilePath",{enumerable:!0,get:function(){return je.envFilePath}});Object.defineProperty(c,"parseEnvFile",{enumerable:!0,get:function(){return je.parseEnvFile}});Object.defineProperty(c,"loadEnvFile",{enumerable:!0,get:function(){return je.loadEnvFile}})});var Z=h(O());function lr(){return(0,Z.envFilePath)(".claude","pinta-cc.env")}function xt(e=lr()){(0,Z.loadEnvFile)(e)}function Nt(){process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT&&!process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT&&(process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT),process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&!process.env.OTEL_EXPORTER_OTLP_HEADERS&&(process.env.OTEL_EXPORTER_OTLP_HEADERS=`x-pinta-relay-token=${process.env.CLAUDE_PLUGIN_OPTION_API_KEY}`),!process.env.PINTA_RELAY_TOKEN&&process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&(process.env.PINTA_RELAY_TOKEN=process.env.CLAUDE_PLUGIN_OPTION_API_KEY)}var Ce=h(require("path")),jt=h(O());function Ct(){let e=process.env.CLAUDE_PLUGIN_ROOT||process.cwd(),t=process.env.CLAUDE_PLUGIN_DATA||Ce.default.join(e,".plugin-data");return{pluginRoot:e,pluginData:t,tracePath:Ce.default.join(t,"trace.json")}}function se(){return(0,jt.envOptionsResolver)()!==null}function It(e){return e.hook_event_name==="PreToolUse"}function Ut(e){return e.hook_event_name==="PostToolUse"||e.hook_event_name==="PostToolUseFailure"}function Bt(e){return e.hook_event_name==="PostToolBatch"}function Lt(e){return e.hook_event_name==="UserPromptSubmit"}function $t(e){return e.hook_event_name==="SessionStart"||e.hook_event_name==="SessionEnd"}function qt(e){return e.hook_event_name==="SubagentStart"||e.hook_event_name==="SubagentStop"}function Ft(e){return e.hook_event_name==="Stop"}function Vt(e){return e.hook_event_name==="PermissionRequest"||e.hook_event_name==="PermissionDenied"}var fr=new Set(["Notification","TaskCreated","TaskCompleted"]);function Gt(e){return fr.has(e.hook_event_name)}var un=h(O());var zt=h(O()),dr=1e4,pr="pinta-cc/1.10.3-skax.0";function F(e,t){return(0,zt.evaluateGuard)(e,t,{timeoutMs:dr,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:pr})}var Q=h(O());var Yt=h(O()),ie=class extends Yt.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-cc"})}};var Xt=h(O()),ae=class extends Xt.TraceManager{constructor(t){super(t.tracePath)}};var de=h(require("os"));var Kt=require("node:child_process"),ce=require("node:crypto"),P=h(require("node:fs")),Ht=h(require("node:os")),_=h(require("node:path")),Zt=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,mr=/^v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)\s+\(Claude Code\)$/m,hr=2e3,gr=24*60*60*1e3,_r=3e4,Ue=8,Qt="claude-version.json",V=new Map;function M(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:"UNKNOWN"}function S(e){process.stderr.write(`[pinta-cc] CLI version: ${e}
24
- `)}function ue(e){return M(e)==="ENOENT"||M(e)==="ENOTDIR"}function yr(){let e=process.env.CLAUDE_CODE_EXECPATH,t=process.platform==="win32"?["claude.exe","claude.cmd"]:["claude"],n;if(e)n=[e];else{let r=(process.env.PATH??"").split(_.default.delimiter).filter(o=>_.default.isAbsolute(o));try{r.push(_.default.join(Ht.default.homedir(),".local","bin"))}catch(o){S(`native install directory lookup failed (${M(o)})`)}n=r.flatMap(o=>t.map(i=>_.default.join(o,i)))}for(let r of new Set(n))try{let o=P.default.realpathSync(r),i=P.default.statSync(o);if(!i.isFile())continue;return!e&&process.platform!=="win32"&&P.default.accessSync(o,P.default.constants.X_OK),{file:o,fingerprint:(0,ce.createHash)("sha256").update(JSON.stringify([o,i.ino,i.size,i.mtimeMs,i.ctimeMs])).digest("hex")}}catch(o){ue(o)||S(`executable lookup failed (${M(o)})`)}return S(e?"configured executable is unavailable":"no Claude executable found in PATH or ~/.local/bin"),null}function Ie(e){let t;try{t=JSON.parse(P.default.readFileSync(e,"utf8"))}catch(n){return ue(n)||S(`package metadata could not be read (${n instanceof SyntaxError?"INVALID_JSON":M(n)})`),null}return typeof t!="object"||t===null||!("name"in t)||!("version"in t)||typeof t.name!="string"||typeof t.version!="string"||!Zt.test(t.version)?null:t.name==="@anthropic-ai/claude-code"||t.name.startsWith("@anthropic-ai/claude-code-")?t.version:null}function vr(e){let t=_.default.dirname(e),n=_.default.basename(t)===".bin"&&/^claude(?:\.cmd)?$/i.test(_.default.basename(e));for(let r=0;r<6;r++){let o=Ie(_.default.join(t,"package.json"));if(o)return o;if(_.default.basename(e).toLowerCase()==="claude.cmd"&&r===0){let s=Ie(_.default.join(t,"node_modules","@anthropic-ai","claude-code","package.json"));if(s)return s}if(n&&_.default.basename(t)==="node_modules"){let s=Ie(_.default.join(t,"@anthropic-ai","claude-code","package.json"));if(s)return s}let i=_.default.dirname(t);if(i===t)break;t=i}return null}function Er(e){return typeof e=="object"&&e!==null&&"fingerprint"in e&&typeof e.fingerprint=="string"&&/^[0-9a-f]{64}$/.test(e.fingerprint)&&"version"in e&&(e.version===null||typeof e.version=="string"&&Zt.test(e.version))&&"checkedAt"in e&&typeof e.checkedAt=="number"&&Number.isFinite(e.checkedAt)}function Jt(e,t){let n=t-e.checkedAt;return n>=0&&n<(e.version===null?_r:gr)}function Pr(e){if(!e)return[];let t=_.default.join(e,Qt);try{if(P.default.statSync(t).size>16384)return S("oversized version cache ignored"),[];let n=JSON.parse(P.default.readFileSync(t,"utf8"));if(Array.isArray(n)&&n.length<=Ue&&n.every(Er))return n;S("invalid version cache ignored")}catch(n){ue(n)||S(`version cache read failed (${n instanceof SyntaxError?"INVALID_JSON":M(n)})`)}return[]}function Wt(e){for(V.delete(e.fingerprint),V.set(e.fingerprint,e);V.size>Ue;){let t=V.keys().next().value;t!==void 0&&V.delete(t)}}function Sr(e,t){if(!e)return;let n=_.default.join(e,Qt),r=`${n}.${process.pid}.${(0,ce.randomUUID)()}.tmp`;try{P.default.mkdirSync(e,{recursive:!0,mode:448}),P.default.writeFileSync(r,JSON.stringify(t),{encoding:"utf8",mode:384,flag:"wx"}),P.default.renameSync(r,n)}catch(o){S(`version cache write failed (${M(o)})`)}finally{try{P.default.unlinkSync(r)}catch(o){ue(o)||S(`temporary version cache cleanup failed (${M(o)})`)}}}function Tr(e){if(/\.(cmd|bat|ps1)$/i.test(e))return S("command shim has no readable Claude package metadata"),null;let t=(0,Kt.spawnSync)(e,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:!1,windowsHide:!0,timeout:hr,killSignal:"SIGKILL",maxBuffer:4096});if(t.error||t.status!==0)return S(`version probe failed (${t.error?M(t.error):`exit ${t.status??t.signal}`})`),null;let n=mr.exec(t.stdout.trim())?.[1];return n||(S("version probe did not identify Claude Code"),null)}function en(e){let t=yr();if(!t)return"unknown";let n=vr(t.file);if(n)return n;let r=Date.now(),o=Pr(e),i=[V.get(t.fingerprint),...o].find(a=>a&&a.fingerprint===t.fingerprint&&Jt(a,r));if(i)return Wt(i),i.version??"unknown";let s={fingerprint:t.fingerprint,version:Tr(t.file),checkedAt:Date.now()};return Wt(s),Sr(e,[...o.filter(a=>a.fingerprint!==s.fingerprint&&Jt(a,s.checkedAt)),s].slice(-Ue)),s.version??"unknown"}var j=h(require("node:path"));var k=h(require("node:fs")),Be=h(require("node:path")),br=new Set(["","unknown","undefined","null","n/a","none","auto","default"]),Or=256*1024,kr=1024*1024,Ar=4096;function U(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function Le(e){let t=U(e),n=t?"id"in t?t.id:t.name:e;if(typeof n!="string")return;let r=n.trim();if(!(r.startsWith("{")||r.startsWith("[")))return r.length<=512&&!/[\u0000-\u001f\u007f]/.test(r)&&!br.has(r.toLowerCase())?r:void 0}function tn(e,t){delete e.model,t&&(e.model=t.name,!(t.source==="hook.model"&&e.model_source!==void 0)&&(e.model_source!==void 0&&(e.model_original_source=e.model_source),e.model_source=t.source))}function G(e){return typeof e=="string"&&/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,255}$/.test(e)?e:void 0}function le(e){let t=typeof e=="number"?e:typeof e=="string"&&/^\d{4}-\d{2}-\d{2}T/.test(e)?Date.parse(e):NaN;return Number.isFinite(t)&&t>=0?t:void 0}function nn(e,t){let n=e.timestamp===void 0?le(t):le(e.timestamp);return n!==void 0&&n<=t?n:void 0}function rn(e){if(typeof e!="string"||e.length>4096||/[\u0000-\u001f]/.test(e)||!Be.default.isAbsolute(e)||Be.default.extname(e)!==".jsonl")return;let t;try{t=k.default.openSync(e,k.default.constants.O_RDONLY|k.default.constants.O_NONBLOCK|(k.default.constants.O_NOFOLLOW??0));let n=k.default.fstatSync(t);if(!n.isFile()||!Number.isSafeInteger(n.size)||n.size<=0)return;let r=Buffer.alloc(Math.min(n.size,Or));if(k.default.readSync(t,r,0,r.length,0)!==r.length)return;let o=r.indexOf(10),i;if(o>=0)try{i=U(JSON.parse(r.toString("utf8",0,o)))}catch{}let s=Math.max(0,n.size-kr),a=n.size<=r.length?r:Buffer.alloc(n.size-s);if(a!==r&&k.default.readSync(t,a,0,a.length,s)!==a.length)return;let u=k.default.fstatSync(t);if(u.size<n.size||u.size===n.size&&u.mtimeMs!==n.mtimeMs)return;let l=s>0?a.indexOf(10)+1:0,d=a.lastIndexOf(10);if(s>0&&l===0||d<l)return;let f=[],p=0;for(;d>l&&p<Ar;){let A=a.lastIndexOf(10,d-1),X=Math.max(l,A+1),qe=a.toString("utf8",X,d).trim();if(qe){let Fe=U(JSON.parse(qe));Fe&&f.push(Fe)}d=X-1,p++}return f.reverse(),{first:i,rows:f,complete:s===0&&d<0&&a[a.length-1]===10}}catch{return}finally{if(t!==void 0)try{k.default.closeSync(t)}catch{}}}function on(e){let t=e[0];return t&&e.every(n=>n?.name===t.name)?t:void 0}var wr=new Set(["PreToolUse","PostToolUse","PostToolUseFailure","PermissionRequest","PermissionDenied"]);function Mr(e,t){let n=j.default.dirname(e);if(j.default.basename(n)!=="subagents"||j.default.basename(j.default.dirname(n))!==t)return;let r=/^agent-(.+)\.jsonl$/.exec(j.default.basename(e));return G(r?.[1])}function sn(e,t){let n=Le(e.model);if(n)return{name:n,source:"hook.model"};try{return Rr(e,t)}catch{return}}function Rr(e,t){if(!wr.has(e.hook_event_name))return;let n=G(e.session_id),r=G(e.tool_use_id),o=nn(e,t);if(!n||!r||o===void 0||typeof e.transcript_path!="string")return;let i=Mr(e.transcript_path,n),s=e.agent_id===void 0?i:G(e.agent_id);if(e.agent_id!==void 0&&!s||i!==void 0&&i!==s||!s&&e.agent_type!==void 0||j.default.basename(j.default.dirname(e.transcript_path))==="subagents"&&!i)return;let a=rn(e.transcript_path);if(!a)return;let u=[];for(let l of a.rows){let d=le(l.timestamp);if(l.type!=="assistant"||l.sessionId!==n||d===void 0||d>o)continue;let f=l.agentId===void 0?void 0:G(l.agentId);if(f!==s||l.agentId!==void 0&&!f||l.isSidechain===!0&&!s)continue;let p=U(l.message);if(!p||p.role!==void 0&&p.role!=="assistant"||!Array.isArray(p.content)||!p.content.some(X=>U(X)?.type==="tool_use"&&U(X)?.id===r))continue;let A=Le(p.model);u.push(A?{name:A,source:"transcript.assistant.message"}:void 0)}return on(u)}var z=h(O()),fe;function Dr(){if(fe===void 0)try{fe=de.default.userInfo().username}catch{fe=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return fe}var an="1.10.3-skax.0",xr=new Set(["cc.hook","cc.tool_name","cc.tool_use_id","cc.session_id","cc.transcript_path","cc.cwd","cc.permission_mode"]),Nr=new Set(["cc.tool_input","cc.tool_response","cc.tool_calls"]),jr={skipRedactKeys:xr,bashContextKeys:Nr,outputForKey:(e,t)=>{if(e==="cc.error"||e==="cc.error_message")return t;if(e==="cc.tool_calls"&&Array.isArray(t))return t.map(n=>n&&typeof n=="object"&&"tool_response"in n?n.tool_response:void 0);if(!(e!=="cc.tool_response"&&e!=="cc.tool_result"))return t&&typeof t=="object"&&"file"in t&&t.file&&typeof t.file=="object"&&"content"in t.file&&t.file.content!==void 0?t.file.content:t}};function Cr(e,t){let n=[];n.push({key:"ingest.type",value:{stringValue:"cc"}}),n.push({key:"cc.hook",value:{stringValue:e.hook_event_name}});let r={};for(let[o,i]of Object.entries(e))o!=="hook_event_name"&&(r[o]=i);return tn(r,sn(e,t)),n.push(...(0,z.attrsFromRecord)(r,"cc",jr)),n}function Ir(e){return[{key:"service.name",value:{stringValue:"claude-code"}},{key:"service.version",value:{stringValue:en(e)}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-cc"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:an}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:Dr()}},{key:"host.name",value:{stringValue:de.default.hostname()}},{key:"host.arch",value:{stringValue:de.default.arch()}}]}function cn(e){let t=e.now??Date.now();return(0,z.buildPayload)({traceId:e.traceId,spanName:`cc.${(0,z.snakeCase)(e.event.hook_event_name)}`,attributes:Cr(e.event,t),resource:Ir(e.versionCacheDir),scope:{name:"pinta-cc",version:an},now:t})}function B(e,t,n={}){let r=new ae(t),o=n.traceMode==="new"?r.newTrace():r.currentTrace();return cn({event:e,traceId:o,versionCacheDir:t.pluginData})}async function L(e,t){if(!se())return;let n=new ie(t);await n.flush(),await n.send(e)}function Y(e,t){if(!se())return;let n=Buffer.byteLength(JSON.stringify(e),"utf-8");if(n>Q.MAX_POST_BYTES){process.stderr.write(`[pinta-cc] dropping oversized span payload (${n} > ${Q.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
25
- `);return}new Q.DiskRetryQueue(t.pluginData,"pinta-cc").enqueue(e)}async function T(e,t,n={}){se()&&await L(B(e,t,n),t)}async function ln(e,t){let n=B(e,t),r=await F(n,process.env.PINTA_GUARD_ENDPOINT);if(r?.decision==="DENY"){let i={hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:r.userMessage??r.reason??"guard_deny"}};process.stdout.write(JSON.stringify(i)+`
26
- `)}try{if((0,un.attachGuard)(n,r),r?.decision==="DENY")return Y(n,t),0;await L(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
27
- `)}return 0}var fn=h(O());async function dn(e,t){if(e.hook_event_name==="PostToolUseFailure")return await T(e,t),0;let n=B(e,t),r=await F(n,process.env.PINTA_GUARD_ENDPOINT);r?.decision==="DENY"&&process.stdout.write(JSON.stringify({continue:!1,stopReason:"Pinta blocked this tool output. Start a new session before continuing."})+`
28
- `);try{if((0,fn.attachGuard)(n,r),r&&n.resourceSpans[0].scopeSpans[0].spans[0].attributes.push({key:"pinta.guard.target",value:{stringValue:"tool_output"}}),r?.decision==="DENY")return Y(n,t),0;await L(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
29
- `)}return 0}async function pn(e,t){return await T(e,t,{traceMode:"new"}),0}async function mn(e,t){return await T(e,t),0}async function hn(e,t){return await T(e,t),0}async function gn(e,t){return await T(e,t),0}var _n=h(O());async function yn(e,t){if(e.hook_event_name==="PermissionDenied")return await T(e,t),0;let n=B(e,t),r=await F(n,process.env.PINTA_GUARD_ENDPOINT);r?.decision==="DENY"&&process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"deny",message:r.userMessage??r.reason??"guard_deny"}}})+`
30
- `);try{if((0,_n.attachGuard)(n,r),r?.decision==="DENY")return Y(n,t),0;await L(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
31
- `)}return 0}async function $e(e){return 0}async function Ur(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function vn(){Nt();let e=0;try{let t=Ct(),n=await Ur(),r=JSON.parse(n);Gt(r)?e=await $e(r):It(r)?e=await ln(r,t):Ut(r)||Bt(r)?e=await dn(r,t):Lt(r)?e=await pn(r,t):$t(r)?e=await mn(r,t):qt(r)?e=await hn(r,t):Ft(r)?e=await gn(r,t):Vt(r)?e=await yn(r,t):e=await $e(r)}catch(t){process.stderr.write(`[pinta-cc] error: ${t}
32
- `),e=0}return e}xt();async function Br(){let e=await vn();process.exit(e)}Br();
16
+ `),!1}finally{clearTimeout(o)}}var Ee=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new at.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??dt}async send(t){let n=this.resolveOptions();if(!n||this.dropIfOversized(t))return;await H(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(t&&this.queue.tryAcquireLock())try{let n=this.queue.readAll();if(n.length===0)return;let{chunks:r,oversize:o}=ct(n,a=>oe(a.payload),f.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized retry ${o.length===1?"entry":"entries"} (each > ${f.MAX_POST_BYTES} bytes \u2014 the backend caps the request body, so they can never be delivered)
17
+ `);let i=[].concat(...r),s=0;for(let a of r){if(!await H((0,ut.mergeBatch)(a.map(l=>l.payload)),t,this.logPrefix))break;s+=a.length}this.queue.rewrite(i.slice(s))}catch(n){process.stderr.write(`[${this.logPrefix}] flush failed: ${n?.message??String(n)}
18
+ `)}finally{this.queue.release()}}dropIfOversized(t){let n=oe(t);return n<=f.MAX_POST_BYTES?!1:(process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (${n} > ${f.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
19
+ `),!0)}};f.DiskTransport=Ee;var Pe=class{queue=new at.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let n=this.resolveOptions();if(!n)return;if(oe(t)>f.MAX_POST_BYTES){process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (> ${f.MAX_POST_BYTES} bytes) \u2014 undeliverable, not buffered
20
+ `);return}await H(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(!t)return;let n=this.queue.drain();if(n.length===0)return;let{chunks:r,oversize:o}=ct(n,oe,f.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${f.MAX_POST_BYTES} bytes \u2014 undeliverable)
21
+ `);let i=[].concat(...r),s=0;for(let a of r){if(!await H((0,ut.mergeBatch)(a),t,this.logPrefix))break;s+=a.length}for(let a of i.slice(s))this.queue.enqueue(a)}};f.MemoryTransport=Pe});var Oe=b(N=>{"use strict";var be=N&&N.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(N,"__esModule",{value:!0});N.TraceManager=void 0;N.generateUlid=mt;var pt=be(require("fs")),Kn=be(require("path")),Zn=be(require("crypto")),Jn=te(),Se="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function mt(){let e=Date.now(),t="",n=e;for(let i=0;i<10;i++)t=Se[n&31]+t,n=Math.floor(n/32);let r=Zn.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=Se[r[i]&31];for(;o.length<16;)o+=Se[0];return t+o}var Te=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=mt();return this.save(t),t}currentTrace(){try{let t=pt.default.readFileSync(this.tracePath,"utf-8"),{traceId:n}=JSON.parse(t);if(n)return n}catch{}return this.newTrace()}save(t){try{pt.default.mkdirSync(Kn.default.dirname(this.tracePath),{recursive:!0}),(0,Jn.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(n){process.stderr.write(`[pinta-core] trace persistence failed: ${n}
22
+ `)}}};N.TraceManager=Te});var vt=b(M=>{"use strict";var gt=M&&M.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(M,"__esModule",{value:!0});M.MemorySessionTraceManager=M.DiskSessionTraceManager=void 0;var ht=gt(require("fs")),Wn=gt(require("path")),_t=Oe(),Qn=te(),yt=200,ke=class{tracePath;maxSessions;constructor(t,n={}){this.tracePath=t,this.maxSessions=n.maxSessions??yt}read(){try{let t=JSON.parse(ht.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{ht.default.mkdirSync(Wn.default.dirname(this.tracePath),{recursive:!0});let n=Object.entries(t),r=n.length>this.maxSessions?Object.fromEntries(n.slice(-this.maxSessions)):t;(0,Qn.atomicWriteFileSync)(this.tracePath,JSON.stringify(r))}catch{}}newTrace(t){let n=t||"default",r=(0,_t.generateUlid)(),o=this.read();return o[n]=r,this.write(o),r}currentTrace(t){let n=t||"default",r=this.read()[n];return r||this.newTrace(n)}};M.DiskSessionTraceManager=ke;var Ae=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??yt}newTrace(t){let n=t||"default",r=(0,_t.generateUlid)();if(this.map.set(n,r),this.map.size>this.maxSessions){let o=this.map.keys().next().value;o!==void 0&&this.map.delete(o)}return r}currentTrace(t){let n=t||"default";return this.map.get(n)??this.newTrace(n)}};M.MemorySessionTraceManager=Ae});var St=b(j=>{"use strict";var we=j&&j.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(j,"__esModule",{value:!0});j.envFilePath=nr;j.parseEnvFile=Pt;j.loadEnvFile=rr;var er=we(require("node:fs")),tr=we(require("node:os")),Et=we(require("node:path"));function nr(e,t,n){let r=n?process.env[n]:void 0,o=r&&r.length>0?r:Et.default.join(tr.default.homedir(),e);return Et.default.join(o,t)}function Pt(e){let t={};for(let n of e.split(`
23
+ `)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.indexOf("=");if(o<0)continue;let i=r.slice(0,o).trim(),s=r.slice(o+1).trim();(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),i&&(t[i]=s)}return t}function rr(e){let t;try{t=er.default.readFileSync(e,"utf-8")}catch{return}let n=Pt(t);for(let[r,o]of Object.entries(n))process.env[r]===void 0&&(process.env[r]=o)}});var O=b(u=>{"use strict";Object.defineProperty(u,"__esModule",{value:!0});u.loadEnvFile=u.parseEnvFile=u.envFilePath=u.MemorySessionTraceManager=u.DiskSessionTraceManager=u.generateUlid=u.TraceManager=u.MAX_POST_BYTES=u.parseHeadersEnv=u.envOptionsResolver=u.postOtlp=u.MemoryTransport=u.DiskTransport=u.MemoryRetryQueue=u.DiskRetryQueue=u.GUARD_BUDGET_HEADER=u.GUARD_STATUS_REFUSED=u.evaluateGuard=u.MAX_SPAN_BYTES=u.enforceSpanBudget=u.mergeBatch=u.attachGuard=u.buildPayload=u.clientAttrs=u.guardAttrs=u.attrsFromRecord=u.toOtlpValue=u.snakeCase=u.newSpanId=u.ulidToTraceId=u.MAX_BYTES=u.PATTERNS=u.applyMatches=u.resolveOverlaps=u.collectMatches=u.truncateTo=u.truncate=u.redact=void 0;var D=me();Object.defineProperty(u,"redact",{enumerable:!0,get:function(){return D.redact}});Object.defineProperty(u,"truncate",{enumerable:!0,get:function(){return D.truncate}});Object.defineProperty(u,"truncateTo",{enumerable:!0,get:function(){return D.truncateTo}});Object.defineProperty(u,"collectMatches",{enumerable:!0,get:function(){return D.collectMatches}});Object.defineProperty(u,"resolveOverlaps",{enumerable:!0,get:function(){return D.resolveOverlaps}});Object.defineProperty(u,"applyMatches",{enumerable:!0,get:function(){return D.applyMatches}});Object.defineProperty(u,"PATTERNS",{enumerable:!0,get:function(){return D.PATTERNS}});Object.defineProperty(u,"MAX_BYTES",{enumerable:!0,get:function(){return D.MAX_BYTES}});var E=ge();Object.defineProperty(u,"ulidToTraceId",{enumerable:!0,get:function(){return E.ulidToTraceId}});Object.defineProperty(u,"newSpanId",{enumerable:!0,get:function(){return E.newSpanId}});Object.defineProperty(u,"snakeCase",{enumerable:!0,get:function(){return E.snakeCase}});Object.defineProperty(u,"toOtlpValue",{enumerable:!0,get:function(){return E.toOtlpValue}});Object.defineProperty(u,"attrsFromRecord",{enumerable:!0,get:function(){return E.attrsFromRecord}});Object.defineProperty(u,"guardAttrs",{enumerable:!0,get:function(){return E.guardAttrs}});Object.defineProperty(u,"clientAttrs",{enumerable:!0,get:function(){return E.clientAttrs}});Object.defineProperty(u,"buildPayload",{enumerable:!0,get:function(){return E.buildPayload}});Object.defineProperty(u,"attachGuard",{enumerable:!0,get:function(){return E.attachGuard}});Object.defineProperty(u,"mergeBatch",{enumerable:!0,get:function(){return E.mergeBatch}});Object.defineProperty(u,"enforceSpanBudget",{enumerable:!0,get:function(){return E.enforceSpanBudget}});Object.defineProperty(u,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return E.MAX_SPAN_BYTES}});var Re=ot();Object.defineProperty(u,"evaluateGuard",{enumerable:!0,get:function(){return Re.evaluateGuard}});Object.defineProperty(u,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return Re.GUARD_STATUS_REFUSED}});Object.defineProperty(u,"GUARD_BUDGET_HEADER",{enumerable:!0,get:function(){return Re.GUARD_BUDGET_HEADER}});var Tt=ve();Object.defineProperty(u,"DiskRetryQueue",{enumerable:!0,get:function(){return Tt.DiskRetryQueue}});Object.defineProperty(u,"MemoryRetryQueue",{enumerable:!0,get:function(){return Tt.MemoryRetryQueue}});var L=ft();Object.defineProperty(u,"DiskTransport",{enumerable:!0,get:function(){return L.DiskTransport}});Object.defineProperty(u,"MemoryTransport",{enumerable:!0,get:function(){return L.MemoryTransport}});Object.defineProperty(u,"postOtlp",{enumerable:!0,get:function(){return L.postOtlp}});Object.defineProperty(u,"envOptionsResolver",{enumerable:!0,get:function(){return L.envOptionsResolver}});Object.defineProperty(u,"parseHeadersEnv",{enumerable:!0,get:function(){return L.parseHeadersEnv}});Object.defineProperty(u,"MAX_POST_BYTES",{enumerable:!0,get:function(){return L.MAX_POST_BYTES}});var bt=Oe();Object.defineProperty(u,"TraceManager",{enumerable:!0,get:function(){return bt.TraceManager}});Object.defineProperty(u,"generateUlid",{enumerable:!0,get:function(){return bt.generateUlid}});var Ot=vt();Object.defineProperty(u,"DiskSessionTraceManager",{enumerable:!0,get:function(){return Ot.DiskSessionTraceManager}});Object.defineProperty(u,"MemorySessionTraceManager",{enumerable:!0,get:function(){return Ot.MemorySessionTraceManager}});var Me=St();Object.defineProperty(u,"envFilePath",{enumerable:!0,get:function(){return Me.envFilePath}});Object.defineProperty(u,"parseEnvFile",{enumerable:!0,get:function(){return Me.parseEnvFile}});Object.defineProperty(u,"loadEnvFile",{enumerable:!0,get:function(){return Me.loadEnvFile}})});var K=p(O());function or(){return(0,K.envFilePath)(".claude","pinta-cc.env")}function kt(e=or()){(0,K.loadEnvFile)(e)}function At(){process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT&&!process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT&&(process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT),process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&!process.env.OTEL_EXPORTER_OTLP_HEADERS&&(process.env.OTEL_EXPORTER_OTLP_HEADERS=`x-pinta-relay-token=${process.env.CLAUDE_PLUGIN_OPTION_API_KEY}`),!process.env.PINTA_RELAY_TOKEN&&process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&(process.env.PINTA_RELAY_TOKEN=process.env.CLAUDE_PLUGIN_OPTION_API_KEY)}var De=p(require("path")),wt=p(O());function Rt(){let e=process.env.CLAUDE_PLUGIN_ROOT||process.cwd(),t=process.env.CLAUDE_PLUGIN_DATA||De.default.join(e,".plugin-data");return{pluginRoot:e,pluginData:t,tracePath:De.default.join(t,"trace.json")}}function se(){return(0,wt.envOptionsResolver)()!==null}function Mt(e){return e.hook_event_name==="PreToolUse"}function Dt(e){return e.hook_event_name==="PostToolUse"||e.hook_event_name==="PostToolUseFailure"}function xt(e){return e.hook_event_name==="PostToolBatch"}function Nt(e){return e.hook_event_name==="UserPromptSubmit"}function jt(e){return e.hook_event_name==="SessionStart"||e.hook_event_name==="SessionEnd"}function It(e){return e.hook_event_name==="SubagentStart"||e.hook_event_name==="SubagentStop"}function Ct(e){return e.hook_event_name==="Stop"}function Ut(e){return e.hook_event_name==="PermissionRequest"||e.hook_event_name==="PermissionDenied"}function Bt(e){return typeof e.cursor_version=="string"&&e.cursor_version.trim().length>0}var sr=new Set(["Notification","TaskCreated","TaskCompleted"]);function Lt(e){return sr.has(e.hook_event_name)}var rn=p(O());var $t=p(O()),ir=1e4,ar="pinta-cc/1.10.3";function $(e,t){return(0,$t.evaluateGuard)(e,t,{timeoutMs:ir,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:ar})}var Z=p(O());var qt=p(O()),ie=class extends qt.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-cc"})}};var Ft=p(O()),ae=class extends Ft.TraceManager{constructor(t){super(t.tracePath)}};var fe=p(require("os"));var Yt=require("node:child_process"),ue=require("node:crypto"),P=p(require("node:fs")),zt=p(require("node:os")),h=p(require("node:path")),Xt=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,ur=/^v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)\s+\(Claude Code\)$/m,cr=2e3,lr=24*60*60*1e3,dr=3e4,Ne=8,Ht="claude-version.json",q=new Map;function w(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:"UNKNOWN"}function S(e){process.stderr.write(`[pinta-cc] CLI version: ${e}
24
+ `)}function ce(e){return w(e)==="ENOENT"||w(e)==="ENOTDIR"}function fr(){let e=process.env.CLAUDE_CODE_EXECPATH,t=process.platform==="win32"?["claude.exe","claude.cmd"]:["claude"],n;if(e)n=[e];else{let r=(process.env.PATH??"").split(h.default.delimiter).filter(o=>h.default.isAbsolute(o));try{r.push(h.default.join(zt.default.homedir(),".local","bin"))}catch(o){S(`native install directory lookup failed (${w(o)})`)}n=r.flatMap(o=>t.map(i=>h.default.join(o,i)))}for(let r of new Set(n))try{let o=P.default.realpathSync(r),i=P.default.statSync(o);if(!i.isFile())continue;return!e&&process.platform!=="win32"&&P.default.accessSync(o,P.default.constants.X_OK),{file:o,fingerprint:(0,ue.createHash)("sha256").update(JSON.stringify([o,i.ino,i.size,i.mtimeMs,i.ctimeMs])).digest("hex")}}catch(o){ce(o)||S(`executable lookup failed (${w(o)})`)}return S(e?"configured executable is unavailable":"no Claude executable found in PATH or ~/.local/bin"),null}function xe(e){let t;try{t=JSON.parse(P.default.readFileSync(e,"utf8"))}catch(n){return ce(n)||S(`package metadata could not be read (${n instanceof SyntaxError?"INVALID_JSON":w(n)})`),null}return typeof t!="object"||t===null||!("name"in t)||!("version"in t)||typeof t.name!="string"||typeof t.version!="string"||!Xt.test(t.version)?null:t.name==="@anthropic-ai/claude-code"||t.name.startsWith("@anthropic-ai/claude-code-")?t.version:null}function pr(e){let t=h.default.dirname(e),n=h.default.basename(t)===".bin"&&/^claude(?:\.cmd)?$/i.test(h.default.basename(e));for(let r=0;r<6;r++){let o=xe(h.default.join(t,"package.json"));if(o)return o;if(h.default.basename(e).toLowerCase()==="claude.cmd"&&r===0){let s=xe(h.default.join(t,"node_modules","@anthropic-ai","claude-code","package.json"));if(s)return s}if(n&&h.default.basename(t)==="node_modules"){let s=xe(h.default.join(t,"@anthropic-ai","claude-code","package.json"));if(s)return s}let i=h.default.dirname(t);if(i===t)break;t=i}return null}function mr(e){return typeof e=="object"&&e!==null&&"fingerprint"in e&&typeof e.fingerprint=="string"&&/^[0-9a-f]{64}$/.test(e.fingerprint)&&"version"in e&&(e.version===null||typeof e.version=="string"&&Xt.test(e.version))&&"checkedAt"in e&&typeof e.checkedAt=="number"&&Number.isFinite(e.checkedAt)}function Gt(e,t){let n=t-e.checkedAt;return n>=0&&n<(e.version===null?dr:lr)}function hr(e){if(!e)return[];let t=h.default.join(e,Ht);try{if(P.default.statSync(t).size>16384)return S("oversized version cache ignored"),[];let n=JSON.parse(P.default.readFileSync(t,"utf8"));if(Array.isArray(n)&&n.length<=Ne&&n.every(mr))return n;S("invalid version cache ignored")}catch(n){ce(n)||S(`version cache read failed (${n instanceof SyntaxError?"INVALID_JSON":w(n)})`)}return[]}function Vt(e){for(q.delete(e.fingerprint),q.set(e.fingerprint,e);q.size>Ne;){let t=q.keys().next().value;t!==void 0&&q.delete(t)}}function gr(e,t){if(!e)return;let n=h.default.join(e,Ht),r=`${n}.${process.pid}.${(0,ue.randomUUID)()}.tmp`;try{P.default.mkdirSync(e,{recursive:!0,mode:448}),P.default.writeFileSync(r,JSON.stringify(t),{encoding:"utf8",mode:384,flag:"wx"}),P.default.renameSync(r,n)}catch(o){S(`version cache write failed (${w(o)})`)}finally{try{P.default.unlinkSync(r)}catch(o){ce(o)||S(`temporary version cache cleanup failed (${w(o)})`)}}}function _r(e){if(/\.(cmd|bat|ps1)$/i.test(e))return S("command shim has no readable Claude package metadata"),null;let t=(0,Yt.spawnSync)(e,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:!1,windowsHide:!0,timeout:cr,killSignal:"SIGKILL",maxBuffer:4096});if(t.error||t.status!==0)return S(`version probe failed (${t.error?w(t.error):`exit ${t.status??t.signal}`})`),null;let n=ur.exec(t.stdout.trim())?.[1];return n||(S("version probe did not identify Claude Code"),null)}function Kt(e){let t=fr();if(!t)return"unknown";let n=pr(t.file);if(n)return n;let r=Date.now(),o=hr(e),i=[q.get(t.fingerprint),...o].find(a=>a&&a.fingerprint===t.fingerprint&&Gt(a,r));if(i)return Vt(i),i.version??"unknown";let s={fingerprint:t.fingerprint,version:_r(t.file),checkedAt:Date.now()};return Vt(s),gr(e,[...o.filter(a=>a.fingerprint!==s.fingerprint&&Gt(a,s.checkedAt)),s].slice(-Ne)),s.version??"unknown"}var x=p(require("node:path"));var k=p(require("node:fs")),je=p(require("node:path")),yr=new Set(["","unknown","undefined","null","n/a","none","auto","default"]),vr=256*1024,Er=1024*1024,Pr=4096;function I(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function Ie(e){let t=I(e),n=t?"id"in t?t.id:t.name:e;if(typeof n!="string")return;let r=n.trim();if(!(r.startsWith("{")||r.startsWith("[")))return r.length<=512&&!/[\u0000-\u001f\u007f]/.test(r)&&!yr.has(r.toLowerCase())?r:void 0}function Zt(e,t){delete e.model,t&&(e.model=t.name,!(t.source==="hook.model"&&e.model_source!==void 0)&&(e.model_source!==void 0&&(e.model_original_source=e.model_source),e.model_source=t.source))}function F(e){return typeof e=="string"&&/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,255}$/.test(e)?e:void 0}function le(e){let t=typeof e=="number"?e:typeof e=="string"&&/^\d{4}-\d{2}-\d{2}T/.test(e)?Date.parse(e):NaN;return Number.isFinite(t)&&t>=0?t:void 0}function Jt(e,t){let n=e.timestamp===void 0?le(t):le(e.timestamp);return n!==void 0&&n<=t?n:void 0}function Wt(e){if(typeof e!="string"||e.length>4096||/[\u0000-\u001f]/.test(e)||!je.default.isAbsolute(e)||je.default.extname(e)!==".jsonl")return;let t;try{t=k.default.openSync(e,k.default.constants.O_RDONLY|k.default.constants.O_NONBLOCK|(k.default.constants.O_NOFOLLOW??0));let n=k.default.fstatSync(t);if(!n.isFile()||!Number.isSafeInteger(n.size)||n.size<=0)return;let r=Buffer.alloc(Math.min(n.size,vr));if(k.default.readSync(t,r,0,r.length,0)!==r.length)return;let o=r.indexOf(10),i;if(o>=0)try{i=I(JSON.parse(r.toString("utf8",0,o)))}catch{}let s=Math.max(0,n.size-Er),a=n.size<=r.length?r:Buffer.alloc(n.size-s);if(a!==r&&k.default.readSync(t,a,0,a.length,s)!==a.length)return;let c=k.default.fstatSync(t);if(c.size<n.size||c.size===n.size&&c.mtimeMs!==n.mtimeMs)return;let l=s>0?a.indexOf(10)+1:0,d=a.lastIndexOf(10);if(s>0&&l===0||d<l)return;let y=[],v=0;for(;d>l&&v<Pr;){let J=a.lastIndexOf(10,d-1),Y=Math.max(l,J+1),Ue=a.toString("utf8",Y,d).trim();if(Ue){let Be=I(JSON.parse(Ue));Be&&y.push(Be)}d=Y-1,v++}return y.reverse(),{first:i,rows:y,complete:s===0&&d<0&&a[a.length-1]===10}}catch{return}finally{if(t!==void 0)try{k.default.closeSync(t)}catch{}}}function Qt(e){let t=e[0];return t&&e.every(n=>n?.name===t.name)?t:void 0}var Sr=new Set(["PreToolUse","PostToolUse","PostToolUseFailure","PermissionRequest","PermissionDenied"]);function Tr(e,t){let n=x.default.dirname(e);if(x.default.basename(n)!=="subagents"||x.default.basename(x.default.dirname(n))!==t)return;let r=/^agent-(.+)\.jsonl$/.exec(x.default.basename(e));return F(r?.[1])}function en(e,t){let n=Ie(e.model);if(n)return{name:n,source:"hook.model"};try{return br(e,t)}catch{return}}function br(e,t){if(!Sr.has(e.hook_event_name))return;let n=F(e.session_id),r=F(e.tool_use_id),o=Jt(e,t);if(!n||!r||o===void 0||typeof e.transcript_path!="string")return;let i=Tr(e.transcript_path,n),s=e.agent_id===void 0?i:F(e.agent_id);if(e.agent_id!==void 0&&!s||i!==void 0&&i!==s||!s&&e.agent_type!==void 0||x.default.basename(x.default.dirname(e.transcript_path))==="subagents"&&!i)return;let a=Wt(e.transcript_path);if(!a)return;let c=[];for(let l of a.rows){let d=le(l.timestamp);if(l.type!=="assistant"||l.sessionId!==n||d===void 0||d>o)continue;let y=l.agentId===void 0?void 0:F(l.agentId);if(y!==s||l.agentId!==void 0&&!y||l.isSidechain===!0&&!s)continue;let v=I(l.message);if(!v||v.role!==void 0&&v.role!=="assistant"||!Array.isArray(v.content)||!v.content.some(Y=>I(Y)?.type==="tool_use"&&I(Y)?.id===r))continue;let J=Ie(v.model);c.push(J?{name:J,source:"transcript.assistant.message"}:void 0)}return Qt(c)}var G=p(O()),de;function Or(){if(de===void 0)try{de=fe.default.userInfo().username}catch{de=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return de}var tn="1.10.3",kr=new Set(["cc.hook","cc.tool_name","cc.tool_use_id","cc.session_id","cc.transcript_path","cc.cwd","cc.permission_mode"]),Ar=new Set(["cc.tool_input","cc.tool_response","cc.tool_calls"]),wr={skipRedactKeys:kr,bashContextKeys:Ar};function Rr(e,t){let n=[];n.push({key:"ingest.type",value:{stringValue:"cc"}}),n.push({key:"cc.hook",value:{stringValue:e.hook_event_name}});let r={};for(let[o,i]of Object.entries(e))o!=="hook_event_name"&&(r[o]=i);return Zt(r,en(e,t)),n.push(...(0,G.attrsFromRecord)(r,"cc",wr)),n}function Mr(e){return[{key:"service.name",value:{stringValue:"claude-code"}},{key:"service.version",value:{stringValue:Kt(e)}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-cc"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:tn}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:Or()}},{key:"host.name",value:{stringValue:fe.default.hostname()}},{key:"host.arch",value:{stringValue:fe.default.arch()}}]}function nn(e){let t=e.now??Date.now();return(0,G.buildPayload)({traceId:e.traceId,spanName:`cc.${(0,G.snakeCase)(e.event.hook_event_name)}`,attributes:Rr(e.event,t),resource:Mr(e.versionCacheDir),scope:{name:"pinta-cc",version:tn},now:t})}function C(e,t,n={}){let r=new ae(t),o=n.traceMode==="new"?r.newTrace():r.currentTrace();return nn({event:e,traceId:o,versionCacheDir:t.pluginData})}async function U(e,t){if(!se())return;let n=new ie(t);await n.flush(),await n.send(e)}function V(e,t){if(!se())return;let n=Buffer.byteLength(JSON.stringify(e),"utf-8");if(n>Z.MAX_POST_BYTES){process.stderr.write(`[pinta-cc] dropping oversized span payload (${n} > ${Z.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
25
+ `);return}new Z.DiskRetryQueue(t.pluginData,"pinta-cc").enqueue(e)}async function T(e,t,n={}){se()&&await U(C(e,t,n),t)}async function on(e,t){let n=C(e,t),r=await $(n,process.env.PINTA_GUARD_ENDPOINT);if(r?.decision==="DENY"){let i={hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:r.userMessage??r.reason??"guard_deny"}};process.stdout.write(JSON.stringify(i)+`
26
+ `)}try{if((0,rn.attachGuard)(n,r),r?.decision==="DENY")return V(n,t),0;await U(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
27
+ `)}return 0}var sn=p(O());async function an(e,t){if(e.hook_event_name==="PostToolUseFailure")return await T(e,t),0;let n=C(e,t),r=await $(n,process.env.PINTA_GUARD_ENDPOINT);r?.decision==="DENY"&&process.stdout.write(JSON.stringify({continue:!1,stopReason:"Pinta blocked this tool output. Start a new session before continuing."})+`
28
+ `);try{if((0,sn.attachGuard)(n,r),r&&n.resourceSpans[0].scopeSpans[0].spans[0].attributes.push({key:"pinta.guard.target",value:{stringValue:"tool_output"}}),r?.decision==="DENY")return V(n,t),0;await U(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
29
+ `)}return 0}async function un(e,t){return await T(e,t,{traceMode:"new"}),0}async function cn(e,t){return await T(e,t),0}async function ln(e,t){return await T(e,t),0}async function dn(e,t){return await T(e,t),0}var fn=p(O());async function pn(e,t){if(e.hook_event_name==="PermissionDenied")return await T(e,t),0;let n=C(e,t),r=await $(n,process.env.PINTA_GUARD_ENDPOINT);r?.decision==="DENY"&&process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"deny",message:r.userMessage??r.reason??"guard_deny"}}})+`
30
+ `);try{if((0,fn.attachGuard)(n,r),r?.decision==="DENY")return V(n,t),0;await U(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
31
+ `)}return 0}async function Ce(e){return 0}async function Dr(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function mn(){At();let e=0;try{let t=await Dr(),n=JSON.parse(t);if(Bt(n))return 0;let r=Rt();Lt(n)?e=await Ce(n):Mt(n)?e=await on(n,r):Dt(n)||xt(n)?e=await an(n,r):Nt(n)?e=await un(n,r):jt(n)?e=await cn(n,r):It(n)?e=await ln(n,r):Ct(n)?e=await dn(n,r):Ut(n)?e=await pn(n,r):e=await Ce(n)}catch(t){process.stderr.write(`[pinta-cc] error: ${t}
32
+ `),e=0}return e}kt();async function xr(){let e=await mn();process.exit(e)}xr();
package/dist/index.mjs CHANGED
@@ -1,33 +1,33 @@
1
1
  import{createRequire as __pintaCreateRequire}from 'node:module';const require=__pintaCreateRequire(import.meta.url);
2
- var Sn=Object.create;var qe=Object.defineProperty;var Tn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var On=Object.getPrototypeOf,kn=Object.prototype.hasOwnProperty;var v=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var An=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of bn(t))!kn.call(e,o)&&o!==n&&qe(e,o,{get:()=>t[o],enumerable:!(r=Tn(t,o))||r.enumerable});return e};var k=(e,t,n)=>(n=e!=null?Sn(On(e)):{},An(t||!e||!e.__esModule?qe(n,"default",{value:e,enumerable:!0}):n,e));var Ye=T(pe=>{"use strict";Object.defineProperty(pe,"__esModule",{value:!0});pe.mysqlPasswordRanges=In;var wn=new Set(["mysql","mysqldump","mysqladmin","mysqlcheck","mysqlimport","mysqlshow","mariadb","mariadb-dump","mariadb-admin","mariadb-check","mariadb-import","mariadb-show"]),Mn=new Set(["sh","bash","dash","zsh","ksh"]),Rn=new Set(["-u","--user","-h","--host","-P","--port","-D","--database","-S","--socket","-e","--execute","--protocol","--default-character-set","--defaults-file","--defaults-extra-file","--login-path","--init-command","--ssl-ca","--ssl-capath","--ssl-cert","--ssl-key","--ssl-cipher"]),ne=16;function Ve(e,t,n=e.value.length){return{value:e.value.slice(t,n),ranges:e.ranges.slice(t,n)}}function K(e,t,n,r){e.value+=t.value.slice(n,r);for(let o=n;o<r;o++)e.ranges.push(t.ranges[o])}function Ge(e){if(e?.literal)return e.value.slice(e.value.lastIndexOf("/")+1).replace(/\.exe$/,"")}function Dn(e){let t=0;for(let n=0;n<=ne;n++){for(;/^[A-Za-z_][A-Za-z0-9_]*=/.test(e[t]?.value??"");)t++;let r=Ge(e[t]);if(!r)return;if(["!","if","then","elif","else","while","until","do"].includes(r)){t++;continue}let o={env:["-u","--unset","-C","--chdir"],sudo:["-u","--user","-g","--group","-p","--prompt","-D","--chdir","-R","--chroot","-C","--close-from","-T","--command-timeout"],exec:["-a"],nice:["-n","--adjustment"],timeout:["-s","--signal","-k","--kill-after"]},i={env:["-i","--ignore-environment","-0","--null"],sudo:["-n","-E","-H","-S","-b","-k"],command:["-p"],exec:["-c","-l"],nohup:[],nice:[],time:["-p"],timeout:["--foreground","--preserve-status"]};if(!(r in i))return t;for(t++;e[t]?.value.startsWith("-");){let s=e[t++].value;if(s==="--")break;if(!i[r].includes(s)){if((o[r]??[]).includes(s)){if(!e[t++])return;continue}if(!(o[r]??[]).some(a=>a.startsWith("--")?s.startsWith(a+"="):s.startsWith(a)&&s.length>2)&&!(r==="nice"&&/^-\d+$/.test(s)))return}}if(r==="timeout"&&!/^\d+(?:\.\d+)?[smhd]?$/.test(e[t++]?.value??""))return}}function ze(e,t){let n=1,r="";for(let o=t;o<e.length;o++){let i=e[o];if(i==="\\"&&r!=="'"){o++;continue}if(r){i===r&&(r="");continue}if(i==="'"||i==='"')r=i;else if(i==="(")n++;else if(i===")"&&--n===0)return o}return e.length}function xn(e,t,n,r){let o={value:"",ranges:[],start:t,end:t,literal:!0},i="",s=t;for(;s<e.value.length;){let a=e.value[s];if(!i&&/[\s;|&()<>{}]/.test(a))break;if(a===i){i="",s++;continue}if(!i&&(a==="'"||a==='"')){i=a,s++;continue}if(a==="\\"&&i!=="'"){let u=e.value[s+1];if(u===`
3
- `){s+=2;continue}if(u&&(!i||/[$`"\\]/.test(u))){K(o,e,s+1,s+2),s+=2;continue}}if(i!=="'"&&e.value.startsWith("$(",s)){let u=ze(e.value,s+2);e.value[s+2]!=="("&&r<ne&&$(Ve(e,s+2,u),n,r+1),K(o,e,s,Math.min(u+1,e.value.length)),o.literal=!1,s=Math.min(u+1,e.value.length);continue}if(a==="`"&&i!=="'"){let u=s+1;for(;u<e.value.length&&e.value[u]!=="`";)u+=e.value[u]==="\\"?2:1;r<ne&&$(Ve(e,s+1,u),n,r+1),K(o,e,s,Math.min(u+1,e.value.length)),o.literal=!1,s=Math.min(u+1,e.value.length);continue}a==="$"&&i!=="'"&&(o.literal=!1),K(o,e,s,s+1),s++}return o.end=s,o}function Nn(e,t,n,r){let o=Dn(t);if(o===void 0)return;let i=Ge(t[o]);if(Mn.has(i)&&r<ne){for(let s=o+1;s<t.length;s++){let a=t[s].value;if(a==="--command"||/^-[a-zA-Z]*c[a-zA-Z]*$/.test(a)){let u=t[s+1];u&&$(u,n,r+1);return}if(!a.startsWith("-")||a==="--")return;(a==="-o"||a==="-O")&&s++}return}if(wn.has(i))for(let s=o+1;s<t.length;s++){let a=t[s];if(a.value==="--")return;if(Rn.has(a.value)){s++;continue}a.value.startsWith("-p")&&a.value.length>2&&n.push({start:e.ranges[a.start].start,end:e.ranges[a.end-1].end})}}function $(e,t,n=0){let r=[],o,i=[],s=0,a=()=>{Nn(e,r,t,n),r=[],o=void 0};for(;s<e.value.length;){let u=e.value[s];if(u===`
4
- `){a(),s++;for(let l of i.splice(0))for(;s<e.value.length;){let d=e.value.indexOf(`
5
- `,s),f=d<0?e.value.length:d,p=e.value.slice(s,f);if(s=d<0?f:f+1,(l.stripTabs?p.replace(/^\t+/,""):p)===l.delimiter)break}}else if(/\s/.test(u))s++;else if(u==="#"){let l=e.value.indexOf(`
6
- `,s);s=l<0?e.value.length:l}else if(e.value.startsWith("((",s))a(),s=Math.min(ze(e.value,s+1)+1,e.value.length);else if(/[;|&(){}]/.test(u))a(),s++;else if(u==="<"||u===">")r.at(-1)?.end===s&&/^\d+$/.test(r.at(-1).value)&&r.pop(),o=/^(?:<<<|<<-?|>>|<&|>&|[<>])/.exec(e.value.slice(s))?.[0]??u,s+=o.length;else{let l=xn(e,s,t,n);s=l.end,(o==="<<"||o==="<<-")&&i.push({delimiter:l.value,stripTabs:o==="<<-"}),o||r.push(l),o=void 0}}a()}function jn(e,t,n){let r={value:"",ranges:[]};for(let o=t+1;o<n-1;o++){if(e.value[o]!=="\\"){K(r,e,o,o+1);continue}let i=o+(e.value[o+1]==="u"?6:2),s=JSON.parse(`"${e.value.slice(o,i)}"`);r.value+=s;for(let a=0;a<s.length;a++)r.ranges.push({start:e.ranges[o].start,end:e.ranges[i-1].end});o=i-1}return r}function In(e){let t={value:e,ranges:Array.from({length:e.length},(r,o)=>({start:o,end:o+1}))},n=[];if(/^\s*[{[]/.test(e)){let r;try{r=JSON.parse(e)}catch{return $(t,n),n}if(r!==null&&typeof r=="object"){let o=/"(?:[^"\\]|\\.)*"/g,i;for(;i=o.exec(e);){let s=JSON.parse(i[0]);if(s!=="command"&&s!=="cmd"&&s!=="CommandLine")continue;let a=/^\s*:\s*/.exec(e.slice(o.lastIndex));if(!a)continue;let u=o.lastIndex+a[0].length;if(e[u]!=='"')continue;o.lastIndex=u;let l=o.exec(e);l?.index===u&&$(jn(t,u,u+l[0].length),n)}}return n}return $(t,n),n}});var ge=T(g=>{"use strict";Object.defineProperty(g,"__esModule",{value:!0});g.PATTERNS=g.MAX_BYTES=void 0;g.truncateTo=Xe;g.truncate=Un;g.collectMatches=We;g.resolveOverlaps=me;g.applyMatches=he;g.createDetectedValueMasker=Bn;g.redact=Ln;var Cn=Ye();g.MAX_BYTES=102400;function Xe(e,t){let n=Buffer.from(e,"utf-8");return n.length<=t?e:`${n.subarray(0,Math.max(0,t)).toString("utf-8")}\u2026[TRUNCATED:${n.length}]`}function Un(e){return Xe(e,g.MAX_BYTES)}g.PATTERNS=[{type:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{type:"aws_secret_key",regex:/(?:aws[_-]?secret(?:[_-]?(?:access)?[_-]?key)?)\s*[:=]\s*["']?([A-Za-z0-9/+=]{40})(?![A-Za-z0-9/+=])/gi,captureGroup:1},{type:"gcp_service_account",regex:/\{[\s\S]{0,200}?"type"\s*:\s*"service_account"[\s\S]*?\}/g},{type:"github_token",regex:/gh[pousr]_[A-Za-z0-9]{36,}/g},{type:"gitlab_token",regex:/glpat-[A-Za-z0-9_-]{20}/g},{type:"slack_token",regex:/xox[abrsp]-[0-9A-Za-z-]{10,}/g},{type:"openai_key",regex:/sk-(?:proj-)?[A-Za-z0-9_-]{40,}/g},{type:"anthropic_key",regex:/sk-ant-[A-Za-z0-9_-]{50,}/g},{type:"stripe_key",regex:/(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/g},{type:"jwt",regex:/eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g},{type:"private_key_block",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g},{type:"bearer_token",regex:/bearer\s+([A-Za-z0-9._~+/=-]{12,})/gi,captureGroup:1},{type:"basic_auth",regex:/basic\s+([A-Za-z0-9+/=]{12,})/gi,captureGroup:1},{type:"db_url_password",regex:/\b(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|redis):\/\/[^:\s/]+:([^@\s]+)@/gi,captureGroup:1},{type:"cli_password_flag",regex:/(?:--password|--pass|--pwd)[=\s]([^\s'"]+)/g,captureGroup:1},{type:"cli_password_short",regex:/\s-p([^\s'"]+)/g,captureGroup:1,requireContext:"bash"},{type:"env_var_secret",regex:/^(?:export\s+)?([A-Z][A-Z0-9_]*(?:KEY|SECRET|TOKEN|PASSWORD|PASSWD|PWD|API_KEY)[A-Z0-9_]*)\s*=\s*["']?([^\s"'\n]+)/gm,captureGroup:2}];function We(e,t){let n=[];for(let r of g.PATTERNS){if(r.requireContext&&r.requireContext!==t.context)continue;if(r.type==="cli_password_short"){for(let{start:s,end:a}of(0,Cn.mysqlPasswordRanges)(e))n.push({start:s,end:a,replaceStart:s,replaceEnd:a,type:r.type,replacement:`-p[REDACTED:${r.type}]`});continue}let o=new RegExp(r.regex.source,r.regex.flags),i;for(;(i=o.exec(e))!==null;){let s=r.captureGroup??0,a=i[s];if(a===void 0){i.index===o.lastIndex&&o.lastIndex++;continue}if(/^\[REDACTED(?::[^\]]+)?\]$/i.test(a))continue;let u=i.index,l=i.index+i[0].length,d=u+i[0].indexOf(a),f=d+a.length;n.push({start:u,end:l,replaceStart:d,replaceEnd:f,type:r.type}),i.index===o.lastIndex&&o.lastIndex++}}return n}function me(e){let t=[...e].sort((r,o)=>r.replaceStart-o.replaceStart||o.replaceEnd-r.replaceEnd),n=[];for(let r of t){let o=n[n.length-1];o&&r.replaceStart<o.replaceEnd?(o.replaceEnd=Math.max(o.replaceEnd,r.replaceEnd),o.start=Math.min(o.start,r.start),o.end=Math.max(o.end,r.end)):n.push({...r})}return n}function he(e,t){let n=[...t].sort((o,i)=>i.replaceStart-o.replaceStart),r=e;for(let o of n)r=r.slice(0,o.replaceStart)+(o.replacement??`[REDACTED:${o.type}]`)+r.slice(o.replaceEnd);return r}function Bn(e){let t=new Map;for(let s of e)s.value.length>0&&!t.has(s.value)&&t.set(s.value,s);let n=[...t.values()],r=n.flatMap(s=>{let a=JSON.stringify(s.value).slice(1,-1);return a===s.value?[s]:[s,{...s,value:a}]}),o=(s,a)=>{let u=[],l=[...s.matchAll(/\[(?:PINTA_)?REDACTED(?::[^\]]+)?\]/gi)];for(let d of a)for(let f=s.indexOf(d.value);f>=0;f=s.indexOf(d.value,f+1))l.some(p=>f>=p.index&&f+d.value.length<=p.index+p[0].length)||u.push({start:f,end:f+d.value.length,replaceStart:f,replaceEnd:f+d.value.length,type:d.type});return he(s,me(u))},i=s=>{if(n.length===0)return s;if(t.has(s))return o(s,n);let a=s.trimStart()[0];if(a==="{"||a==="["||a==='"'){let u=!1;try{JSON.parse(s),u=!0}catch(l){if(!(l instanceof SyntaxError))throw l}if(u)return s.replace(/"(?:\\.|[^"\\])*"|-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/gs,l=>{let d=l.startsWith('"'),f=d?JSON.parse(l):l,p=d?i(f):o(f,n);return p===f?l:JSON.stringify(p)})}return o(s,r)};return i}function Ln(e,t={}){if(e.length===0)return e;let n=We(e,t);if(n.length===0)return e;let r=me(n);return he(e,r)}});var Ee=T(h=>{"use strict";var Fn=h&&h.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(h,"__esModule",{value:!0});h.MAX_SPAN_BYTES=void 0;h.ulidToTraceId=Qe;h.newSpanId=et;h.snakeCase=Vn;h.toOtlpValue=rt;h.attrsFromRecord=Gn;h.guardAttrs=ot;h.clientAttrs=st;h.enforceSpanBudget=it;h.buildPayload=zn;h.attachGuard=at;h.mergeBatch=Yn;var $n=Fn(v("crypto")),D=ge(),qn="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Qe(e){if(e.length!==26)throw new Error(`ulidToTraceId: expected 26 chars, got ${e.length}`);let t=0n;for(let r of e){let o=qn.indexOf(r);if(o<0)throw new Error(`ulidToTraceId: invalid Crockford char "${r}"`);t=t<<5n|BigInt(o)}let n=(1n<<128n)-1n;return t&=n,t.toString(16).padStart(32,"0")}function et(){return $n.default.randomBytes(8).toString("hex")}function Vn(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var Ke=new Set,ve=new WeakMap,tt=new WeakMap,nt=new WeakMap;function Je(e){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch(t){if(!(t instanceof TypeError))throw t;return String(e)}}function _e(e,t,n){let r=(n.bashContextKeys??Ke).has(e)?"bash":void 0,o=(n.skipRedactKeys??Ke).has(e)?[]:(0,D.collectMatches)(t,{context:r}),i={stringValue:(0,D.truncate)((0,D.applyMatches)(t,(0,D.resolveOverlaps)(o)))};return ve.set(i,{original:t,detections:o.map(s=>({value:t.slice(s.replaceStart,s.replaceEnd),type:s.type}))}),i}function rt(e,t,n={}){if(t==null)return null;let r;switch(typeof t){case"string":r=_e(e,t,n);break;case"boolean":r={boolValue:t};break;case"number":r=Number.isInteger(t)?{intValue:t}:{doubleValue:t};break;case"object":{r=_e(e,Je(t)??String(t),n);break}default:r=_e(e,String(t),n)}let o=Je(n.outputForKey?.(e,t));return o!==void 0&&tt.set(r,o),r}function Gn(e,t,n={}){let r=[];for(let[o,i]of Object.entries(e)){let s=`${t}.${o}`,a=rt(s,i,n);a!==null&&r.push({key:s,value:a})}return r}function ot(e){let t=[{key:"pinta.guard.decision",value:{stringValue:e.decision.toLowerCase()}},{key:"pinta.guard.duration_ms",value:{intValue:e.durationMs}}];return e.reason&&t.push({key:"pinta.guard.matched_rule",value:{stringValue:e.reason}}),e.failOpenReason&&t.push({key:"pinta.guard.fail_open_reason",value:{stringValue:e.failOpenReason}}),t}function st(e){return[{key:"pinta.client.rtt_ms",value:Number.isInteger(e.rttMs)?{intValue:e.rttMs}:{doubleValue:e.rttMs}},{key:"pinta.client.op",value:{stringValue:e.op}}]}h.MAX_SPAN_BYTES=800*1024;function He(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var Ze=1024;function it(e,t=h.MAX_SPAN_BYTES){let n=He(e);for(let r=0;r<100&&n>t;r++){let o=null,i=0;for(let u of e.attributes){if(!("stringValue"in u.value))continue;let l=Buffer.byteLength(u.value.stringValue,"utf-8");l>i&&(i=l,o=u.value)}if(o===null||i<=Ze)break;let s=n-t,a=Math.max(Ze,i-s-64);o.stringValue=(0,D.truncateTo)(o.stringValue,a),n=He(e)}return e}function zn(e){let t=e.now??Date.now(),n=(BigInt(t)*1000000n).toString(),o=[...e.resource,...e.attributes].flatMap(f=>{let p=ve.get(f.value);return p?[p]:[]}).flatMap(f=>f.detections),i=[...e.resource,...e.attributes].flatMap(f=>{let p=tt.get(f.value);return p===void 0?[]:[p]}),s=new Set(o.filter(f=>{let p=(0,D.createDetectedValueMasker)([f]);return i.some(A=>p(A)!==A)}).map(f=>f.value)),a=(0,D.createDetectedValueMasker)(o),u=e.attributes.map(f=>ye(f,a)),l={traceId:Qe(e.traceId),spanId:et(),name:a(e.spanName),kind:e.spanKind??1,startTimeUnixNano:n,endTimeUnixNano:n,attributes:u},d={resourceSpans:[{resource:{attributes:e.resource.map(f=>ye(f,a))},scopeSpans:[{scope:{name:a(e.scope.name),version:a(e.scope.version)},spans:[l]}]}]};return o.length>0&&(nt.set(d,a),u.push({key:"pinta.facts",value:{stringValue:JSON.stringify({items:[{origin:"attributes",values:o.filter(f=>!s.has(f.value))},{origin:"toolOutput",values:o.filter(f=>s.has(f.value))}].filter(f=>f.values.length>0).map(({origin:f,values:p})=>({category:"DATA_EXFILTRATION",source:"CORE_REDACT",path:"$",secrets:{kinds:["credential"],count:new Set(p.map(A=>A.value)).size,origins:[f],scannedFields:["attributes"],scanner:"core-tier1",truncated:!1,corroboration:["pattern"]}}))})}})),it(l),at(d,e.guard,e.clientTiming)}function ye(e,t){let n={key:t(e.key),value:{...e.value}},r=n.value;if("stringValue"in r){let o=ve.get(e.value),i=t(o?.original??r.stringValue);r.stringValue=o?(0,D.truncate)(i):i}else if("intValue"in r||"doubleValue"in r){let o=String("intValue"in r?r.intValue:r.doubleValue),i=t(o);i!==o&&(n.value={stringValue:i})}return n}function at(e,t,n){let r=e.resourceSpans[0]?.scopeSpans[0]?.spans[0];if(!r)return e;if(t){let i=ot(t),s=nt.get(e);r.attributes.push(...s?i.map(a=>ye(a,s)):i)}let o=n??(t?.clientRttMs!==void 0?{op:"guard",rttMs:t.clientRttMs}:null);return o&&r.attributes.push(...st(o)),e}function Yn(e){let t=[];for(let n of e)t.push(...n.resourceSpans);return{resourceSpans:t}}});var ut=T(w=>{"use strict";Object.defineProperty(w,"__esModule",{value:!0});w.GUARD_STATUS_REFUSED=w.GUARD_BUDGET_HEADER=void 0;w.evaluateGuard=Jn;var Xn=1e4,Wn="pinta-core";w.GUARD_BUDGET_HEADER="x-pinta-guard-budget-ms";function J(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var Kn=new Set(["ALLOW","DENY","REVIEW"]);function ct(e){return e==="timeout"||e==="refused"||e==="error"}w.GUARD_STATUS_REFUSED=410;async function Jn(e,t,n={}){if(!t||n.disabled)return null;let r=n.timeoutMs??Xn,o=Date.now(),i=new AbortController,s=setTimeout(()=>i.abort(),r);try{let a=await fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":n.userAgent??Wn,"x-pinta-relay-token":n.token??"",...n.agentType?{"x-pinta-agent-type":n.agentType}:{},...Number.isFinite(r)&&r>0?{[w.GUARD_BUDGET_HEADER]:String(r)}:{}},body:JSON.stringify(e),signal:i.signal});if(a.status===w.GUARD_STATUS_REFUSED)return J(Date.now()-o,"refused");if(a.status!==200)return J(Date.now()-o,"error");let u=await a.json(),l=u?.durationMs===void 0||typeof u.durationMs=="number"&&Number.isFinite(u.durationMs);if(!u||!Kn.has(u.decision)||!l)return J(Date.now()-o,"error");let d=u.decision==="ALLOW"?u.failOpenReason:void 0;if(d!=null&&!ct(d))return J(Date.now()-o,"error");let f=Date.now()-o;return{decision:u.decision,reason:u.reason??null,userMessage:u.userMessage??null,durationMs:u.durationMs??f,clientRttMs:f,...ct(d)?{failOpenReason:d}:{}}}catch(a){let u=a.name,l=u==="AbortError"||u==="TimeoutError"?"timeout":"error";return J(Date.now()-o,l)}finally{clearTimeout(s)}}});var re=T(H=>{"use strict";var Hn=H&&H.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(H,"__esModule",{value:!0});H.atomicWriteFileSync=Zn;var lt=Hn(v("fs"));function Zn(e,t){let n=`${e}.${process.pid}.tmp`;lt.default.writeFileSync(n,t),lt.default.renameSync(n,e)}});var Te=T(x=>{"use strict";var ft=x&&x.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(x,"__esModule",{value:!0});x.MemoryRetryQueue=x.DiskRetryQueue=void 0;var y=ft(v("fs")),oe=ft(v("path")),Qn=re(),se=1e3,er=50,tr=5,Pe=class{filePath;lockPath;logPrefix;constructor(t,n){this.filePath=oe.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=n}enqueue(t){try{y.default.mkdirSync(oe.default.dirname(this.filePath),{recursive:!0});let n=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
7
- `;y.default.appendFileSync(this.filePath,n),this.trim()}catch(n){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${n}
8
- `)}}readAll(){try{let t=y.default.readFileSync(this.filePath,"utf-8"),n=[];for(let r of t.split(`
9
- `))if(r.trim())try{let o=JSON.parse(r);Array.isArray(o?.payload?.resourceSpans)&&n.push(o)}catch{}return n}catch{return[]}}rewrite(t){try{if(t.length===0){y.default.existsSync(this.filePath)&&y.default.unlinkSync(this.filePath);return}y.default.mkdirSync(oe.default.dirname(this.filePath),{recursive:!0}),(0,Qn.atomicWriteFileSync)(this.filePath,t.map(n=>JSON.stringify(n)).join(`
2
+ var _n=Object.create;var Be=Object.defineProperty;var yn=Object.getOwnPropertyDescriptor;var vn=Object.getOwnPropertyNames;var En=Object.getPrototypeOf,Pn=Object.prototype.hasOwnProperty;var v=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Sn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of vn(t))!Pn.call(e,o)&&o!==n&&Be(e,o,{get:()=>t[o],enumerable:!(r=yn(t,o))||r.enumerable});return e};var k=(e,t,n)=>(n=e!=null?_n(En(e)):{},Sn(t||!e||!e.__esModule?Be(n,"default",{value:e,enumerable:!0}):n,e));var qe=T(pe=>{"use strict";Object.defineProperty(pe,"__esModule",{value:!0});pe.mysqlPasswordRanges=Dn;var Tn=new Set(["mysql","mysqldump","mysqladmin","mysqlcheck","mysqlimport","mysqlshow","mariadb","mariadb-dump","mariadb-admin","mariadb-check","mariadb-import","mariadb-show"]),bn=new Set(["sh","bash","dash","zsh","ksh"]),On=new Set(["-u","--user","-h","--host","-P","--port","-D","--database","-S","--socket","-e","--execute","--protocol","--default-character-set","--defaults-file","--defaults-extra-file","--login-path","--init-command","--ssl-ca","--ssl-capath","--ssl-cert","--ssl-key","--ssl-cipher"]),ee=16;function Le(e,t,n=e.value.length){return{value:e.value.slice(t,n),ranges:e.ranges.slice(t,n)}}function X(e,t,n,r){e.value+=t.value.slice(n,r);for(let o=n;o<r;o++)e.ranges.push(t.ranges[o])}function $e(e){if(e?.literal)return e.value.slice(e.value.lastIndexOf("/")+1).replace(/\.exe$/,"")}function kn(e){let t=0;for(let n=0;n<=ee;n++){for(;/^[A-Za-z_][A-Za-z0-9_]*=/.test(e[t]?.value??"");)t++;let r=$e(e[t]);if(!r)return;if(["!","if","then","elif","else","while","until","do"].includes(r)){t++;continue}let o={env:["-u","--unset","-C","--chdir"],sudo:["-u","--user","-g","--group","-p","--prompt","-D","--chdir","-R","--chroot","-C","--close-from","-T","--command-timeout"],exec:["-a"],nice:["-n","--adjustment"],timeout:["-s","--signal","-k","--kill-after"]},i={env:["-i","--ignore-environment","-0","--null"],sudo:["-n","-E","-H","-S","-b","-k"],command:["-p"],exec:["-c","-l"],nohup:[],nice:[],time:["-p"],timeout:["--foreground","--preserve-status"]};if(!(r in i))return t;for(t++;e[t]?.value.startsWith("-");){let s=e[t++].value;if(s==="--")break;if(!i[r].includes(s)){if((o[r]??[]).includes(s)){if(!e[t++])return;continue}if(!(o[r]??[]).some(a=>a.startsWith("--")?s.startsWith(a+"="):s.startsWith(a)&&s.length>2)&&!(r==="nice"&&/^-\d+$/.test(s)))return}}if(r==="timeout"&&!/^\d+(?:\.\d+)?[smhd]?$/.test(e[t++]?.value??""))return}}function Fe(e,t){let n=1,r="";for(let o=t;o<e.length;o++){let i=e[o];if(i==="\\"&&r!=="'"){o++;continue}if(r){i===r&&(r="");continue}if(i==="'"||i==='"')r=i;else if(i==="(")n++;else if(i===")"&&--n===0)return o}return e.length}function An(e,t,n,r){let o={value:"",ranges:[],start:t,end:t,literal:!0},i="",s=t;for(;s<e.value.length;){let a=e.value[s];if(!i&&/[\s;|&()<>{}]/.test(a))break;if(a===i){i="",s++;continue}if(!i&&(a==="'"||a==='"')){i=a,s++;continue}if(a==="\\"&&i!=="'"){let u=e.value[s+1];if(u===`
3
+ `){s+=2;continue}if(u&&(!i||/[$`"\\]/.test(u))){X(o,e,s+1,s+2),s+=2;continue}}if(i!=="'"&&e.value.startsWith("$(",s)){let u=Fe(e.value,s+2);e.value[s+2]!=="("&&r<ee&&L(Le(e,s+2,u),n,r+1),X(o,e,s,Math.min(u+1,e.value.length)),o.literal=!1,s=Math.min(u+1,e.value.length);continue}if(a==="`"&&i!=="'"){let u=s+1;for(;u<e.value.length&&e.value[u]!=="`";)u+=e.value[u]==="\\"?2:1;r<ee&&L(Le(e,s+1,u),n,r+1),X(o,e,s,Math.min(u+1,e.value.length)),o.literal=!1,s=Math.min(u+1,e.value.length);continue}a==="$"&&i!=="'"&&(o.literal=!1),X(o,e,s,s+1),s++}return o.end=s,o}function wn(e,t,n,r){let o=kn(t);if(o===void 0)return;let i=$e(t[o]);if(bn.has(i)&&r<ee){for(let s=o+1;s<t.length;s++){let a=t[s].value;if(a==="--command"||/^-[a-zA-Z]*c[a-zA-Z]*$/.test(a)){let u=t[s+1];u&&L(u,n,r+1);return}if(!a.startsWith("-")||a==="--")return;(a==="-o"||a==="-O")&&s++}return}if(Tn.has(i))for(let s=o+1;s<t.length;s++){let a=t[s];if(a.value==="--")return;if(On.has(a.value)){s++;continue}a.value.startsWith("-p")&&a.value.length>2&&n.push({start:e.ranges[a.start].start,end:e.ranges[a.end-1].end})}}function L(e,t,n=0){let r=[],o,i=[],s=0,a=()=>{wn(e,r,t,n),r=[],o=void 0};for(;s<e.value.length;){let u=e.value[s];if(u===`
4
+ `){a(),s++;for(let l of i.splice(0))for(;s<e.value.length;){let f=e.value.indexOf(`
5
+ `,s),_=f<0?e.value.length:f,y=e.value.slice(s,_);if(s=f<0?_:_+1,(l.stripTabs?y.replace(/^\t+/,""):y)===l.delimiter)break}}else if(/\s/.test(u))s++;else if(u==="#"){let l=e.value.indexOf(`
6
+ `,s);s=l<0?e.value.length:l}else if(e.value.startsWith("((",s))a(),s=Math.min(Fe(e.value,s+1)+1,e.value.length);else if(/[;|&(){}]/.test(u))a(),s++;else if(u==="<"||u===">")r.at(-1)?.end===s&&/^\d+$/.test(r.at(-1).value)&&r.pop(),o=/^(?:<<<|<<-?|>>|<&|>&|[<>])/.exec(e.value.slice(s))?.[0]??u,s+=o.length;else{let l=An(e,s,t,n);s=l.end,(o==="<<"||o==="<<-")&&i.push({delimiter:l.value,stripTabs:o==="<<-"}),o||r.push(l),o=void 0}}a()}function Rn(e,t,n){let r={value:"",ranges:[]};for(let o=t+1;o<n-1;o++){if(e.value[o]!=="\\"){X(r,e,o,o+1);continue}let i=o+(e.value[o+1]==="u"?6:2),s=JSON.parse(`"${e.value.slice(o,i)}"`);r.value+=s;for(let a=0;a<s.length;a++)r.ranges.push({start:e.ranges[o].start,end:e.ranges[i-1].end});o=i-1}return r}function Dn(e){let t={value:e,ranges:Array.from({length:e.length},(r,o)=>({start:o,end:o+1}))},n=[];if(/^\s*[{[]/.test(e)){let r;try{r=JSON.parse(e)}catch{return L(t,n),n}if(r!==null&&typeof r=="object"){let o=/"(?:[^"\\]|\\.)*"/g,i;for(;i=o.exec(e);){let s=JSON.parse(i[0]);if(s!=="command"&&s!=="cmd"&&s!=="CommandLine")continue;let a=/^\s*:\s*/.exec(e.slice(o.lastIndex));if(!a)continue;let u=o.lastIndex+a[0].length;if(e[u]!=='"')continue;o.lastIndex=u;let l=o.exec(e);l?.index===u&&L(Rn(t,u,u+l[0].length),n)}}return n}return L(t,n),n}});var me=T(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.PATTERNS=h.MAX_BYTES=void 0;h.truncateTo=Ge;h.truncate=Mn;h.collectMatches=Ve;h.resolveOverlaps=ze;h.applyMatches=Ye;h.redact=jn;var xn=qe();h.MAX_BYTES=102400;function Ge(e,t){let n=Buffer.from(e,"utf-8");return n.length<=t?e:`${n.subarray(0,Math.max(0,t)).toString("utf-8")}\u2026[TRUNCATED:${n.length}]`}function Mn(e){return Ge(e,h.MAX_BYTES)}h.PATTERNS=[{type:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{type:"aws_secret_key",regex:/(?:aws[_-]?secret(?:[_-]?(?:access)?[_-]?key)?)\s*[:=]\s*["']?([A-Za-z0-9/+=]{40})(?![A-Za-z0-9/+=])/gi,captureGroup:1},{type:"gcp_service_account",regex:/\{[\s\S]{0,200}?"type"\s*:\s*"service_account"[\s\S]*?\}/g},{type:"github_token",regex:/gh[pousr]_[A-Za-z0-9]{36,}/g},{type:"gitlab_token",regex:/glpat-[A-Za-z0-9_-]{20}/g},{type:"slack_token",regex:/xox[abrsp]-[0-9A-Za-z-]{10,}/g},{type:"openai_key",regex:/sk-(?:proj-)?[A-Za-z0-9_-]{40,}/g},{type:"anthropic_key",regex:/sk-ant-[A-Za-z0-9_-]{50,}/g},{type:"stripe_key",regex:/(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/g},{type:"jwt",regex:/eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g},{type:"private_key_block",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g},{type:"bearer_token",regex:/bearer\s+([A-Za-z0-9._~+/=-]{12,})/gi,captureGroup:1},{type:"basic_auth",regex:/basic\s+([A-Za-z0-9+/=]{12,})/gi,captureGroup:1},{type:"db_url_password",regex:/\b(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|redis):\/\/[^:\s/]+:([^@\s]+)@/gi,captureGroup:1},{type:"cli_password_flag",regex:/(?:--password|--pass|--pwd)[=\s]([^\s'"]+)/g,captureGroup:1},{type:"cli_password_short",regex:/\s-p([^\s'"]+)/g,captureGroup:1,requireContext:"bash"},{type:"env_var_secret",regex:/^(?:export\s+)?([A-Z][A-Z0-9_]*(?:KEY|SECRET|TOKEN|PASSWORD|PASSWD|PWD|API_KEY)[A-Z0-9_]*)\s*=\s*["']?([^\s"'\n]+)/gm,captureGroup:2}];function Ve(e,t){let n=[];for(let r of h.PATTERNS){if(r.requireContext&&r.requireContext!==t.context)continue;if(r.type==="cli_password_short"){for(let{start:s,end:a}of(0,xn.mysqlPasswordRanges)(e))n.push({start:s,end:a,replaceStart:s,replaceEnd:a,type:r.type,replacement:`-p[REDACTED:${r.type}]`});continue}let o=new RegExp(r.regex.source,r.regex.flags),i;for(;(i=o.exec(e))!==null;){let s=r.captureGroup??0,a=i[s];if(a===void 0){i.index===o.lastIndex&&o.lastIndex++;continue}let u=i.index,l=i.index+i[0].length,f=u+i[0].indexOf(a),_=f+a.length;n.push({start:u,end:l,replaceStart:f,replaceEnd:_,type:r.type}),i.index===o.lastIndex&&o.lastIndex++}}return n}function ze(e){let t=[...e].sort((o,i)=>o.start!==i.start?o.start-i.start:i.end-i.start-(o.end-o.start)),n=[],r=-1;for(let o of t)o.start<r||(n.push(o),r=o.end);return n}function Ye(e,t){let n=[...t].sort((o,i)=>i.replaceStart-o.replaceStart),r=e;for(let o of n)r=r.slice(0,o.replaceStart)+(o.replacement??`[REDACTED:${o.type}]`)+r.slice(o.replaceEnd);return r}function jn(e,t={}){if(e.length===0)return e;let n=Ve(e,t);if(n.length===0)return e;let r=ze(n);return Ye(e,r)}});var ge=T(p=>{"use strict";var Nn=p&&p.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(p,"__esModule",{value:!0});p.MAX_SPAN_BYTES=void 0;p.ulidToTraceId=He;p.newSpanId=Ze;p.snakeCase=Un;p.toOtlpValue=Je;p.attrsFromRecord=Bn;p.guardAttrs=Qe;p.clientAttrs=et;p.enforceSpanBudget=tt;p.buildPayload=Ln;p.attachGuard=nt;p.mergeBatch=$n;var In=Nn(v("crypto")),he=me(),Cn="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function He(e){if(e.length!==26)throw new Error(`ulidToTraceId: expected 26 chars, got ${e.length}`);let t=0n;for(let r of e){let o=Cn.indexOf(r);if(o<0)throw new Error(`ulidToTraceId: invalid Crockford char "${r}"`);t=t<<5n|BigInt(o)}let n=(1n<<128n)-1n;return t&=n,t.toString(16).padStart(32,"0")}function Ze(){return In.default.randomBytes(8).toString("hex")}function Un(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var Xe=new Set;function te(e,t,n){let r=(0,he.truncate)(t);if((n.skipRedactKeys??Xe).has(e))return r;let o=(n.bashContextKeys??Xe).has(e)?"bash":void 0;return(0,he.redact)(r,{context:o})}function Je(e,t,n={}){if(t==null)return null;switch(typeof t){case"string":return{stringValue:te(e,t,n)};case"boolean":return{boolValue:t};case"number":return Number.isInteger(t)?{intValue:t}:{doubleValue:t};case"object":try{return{stringValue:te(e,JSON.stringify(t),n)}}catch{return{stringValue:te(e,String(t),n)}}default:return{stringValue:te(e,String(t),n)}}}function Bn(e,t,n={}){let r=[];for(let[o,i]of Object.entries(e)){let s=`${t}.${o}`,a=Je(s,i,n);a!==null&&r.push({key:s,value:a})}return r}function Qe(e){let t=[{key:"pinta.guard.decision",value:{stringValue:e.decision.toLowerCase()}},{key:"pinta.guard.duration_ms",value:{intValue:e.durationMs}}];return e.reason&&t.push({key:"pinta.guard.matched_rule",value:{stringValue:e.reason}}),e.failOpenReason&&t.push({key:"pinta.guard.fail_open_reason",value:{stringValue:e.failOpenReason}}),t}function et(e){return[{key:"pinta.client.rtt_ms",value:Number.isInteger(e.rttMs)?{intValue:e.rttMs}:{doubleValue:e.rttMs}},{key:"pinta.client.op",value:{stringValue:e.op}}]}p.MAX_SPAN_BYTES=800*1024;function Ke(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var We=1024;function tt(e,t=p.MAX_SPAN_BYTES){let n=Ke(e);for(let r=0;r<100&&n>t;r++){let o=null,i=0;for(let u of e.attributes){if(!("stringValue"in u.value))continue;let l=Buffer.byteLength(u.value.stringValue,"utf-8");l>i&&(i=l,o=u.value)}if(o===null||i<=We)break;let s=n-t,a=Math.max(We,i-s-64);o.stringValue=(0,he.truncateTo)(o.stringValue,a),n=Ke(e)}return e}function Ln(e){let t=e.now??Date.now(),n=(BigInt(t)*1000000n).toString(),r=[...e.attributes],o={traceId:He(e.traceId),spanId:Ze(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:n,endTimeUnixNano:n,attributes:r};tt(o);let i={resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[o]}]}]};return nt(i,e.guard,e.clientTiming)}function nt(e,t,n){let r=e.resourceSpans[0]?.scopeSpans[0]?.spans[0];if(!r)return e;t&&r.attributes.push(...Qe(t));let o=n??(t?.clientRttMs!==void 0?{op:"guard",rttMs:t.clientRttMs}:null);return o&&r.attributes.push(...et(o)),e}function $n(e){let t=[];for(let n of e)t.push(...n.resourceSpans);return{resourceSpans:t}}});var rt=T(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.GUARD_STATUS_REFUSED=A.GUARD_BUDGET_HEADER=void 0;A.evaluateGuard=Vn;var Fn=1e4,qn="pinta-core";A.GUARD_BUDGET_HEADER="x-pinta-guard-budget-ms";function ne(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var Gn=new Set(["ALLOW","DENY","REVIEW"]);A.GUARD_STATUS_REFUSED=410;async function Vn(e,t,n={}){if(!t||n.disabled)return null;let r=n.timeoutMs??Fn,o=Date.now(),i=new AbortController,s=setTimeout(()=>i.abort(),r);try{let a=await fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":n.userAgent??qn,"x-pinta-relay-token":n.token??"",...n.agentType?{"x-pinta-agent-type":n.agentType}:{},...Number.isFinite(r)&&r>0?{[A.GUARD_BUDGET_HEADER]:String(r)}:{}},body:JSON.stringify(e),signal:i.signal});if(a.status===A.GUARD_STATUS_REFUSED)return ne(Date.now()-o,"refused");if(a.status!==200)return ne(Date.now()-o,"error");let u=await a.json(),l=u?.durationMs===void 0||typeof u.durationMs=="number"&&Number.isFinite(u.durationMs);if(!u||!Gn.has(u.decision)||!l)return ne(Date.now()-o,"error");let f=Date.now()-o;return{decision:u.decision,reason:u.reason??null,userMessage:u.userMessage??null,durationMs:u.durationMs??f,clientRttMs:f}}catch(a){let u=a.name,l=u==="AbortError"||u==="TimeoutError"?"timeout":"error";return ne(Date.now()-o,l)}finally{clearTimeout(s)}}});var re=T(K=>{"use strict";var zn=K&&K.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(K,"__esModule",{value:!0});K.atomicWriteFileSync=Yn;var ot=zn(v("fs"));function Yn(e,t){let n=`${e}.${process.pid}.tmp`;ot.default.writeFileSync(n,t),ot.default.renameSync(n,e)}});var ve=T(D=>{"use strict";var st=D&&D.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(D,"__esModule",{value:!0});D.MemoryRetryQueue=D.DiskRetryQueue=void 0;var g=st(v("fs")),oe=st(v("path")),Xn=re(),se=1e3,Kn=50,Wn=5,_e=class{filePath;lockPath;logPrefix;constructor(t,n){this.filePath=oe.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=n}enqueue(t){try{g.default.mkdirSync(oe.default.dirname(this.filePath),{recursive:!0});let n=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
7
+ `;g.default.appendFileSync(this.filePath,n),this.trim()}catch(n){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${n}
8
+ `)}}readAll(){try{let t=g.default.readFileSync(this.filePath,"utf-8"),n=[];for(let r of t.split(`
9
+ `))if(r.trim())try{let o=JSON.parse(r);Array.isArray(o?.payload?.resourceSpans)&&n.push(o)}catch{}return n}catch{return[]}}rewrite(t){try{if(t.length===0){g.default.existsSync(this.filePath)&&g.default.unlinkSync(this.filePath);return}g.default.mkdirSync(oe.default.dirname(this.filePath),{recursive:!0}),(0,Xn.atomicWriteFileSync)(this.filePath,t.map(n=>JSON.stringify(n)).join(`
10
10
  `)+`
11
11
  `)}catch(n){process.stderr.write(`[${this.logPrefix}] retry-queue rewrite failed: ${n}
12
- `)}}tryAcquireLock(){let t=Date.now();try{y.default.mkdirSync(oe.default.dirname(this.lockPath),{recursive:!0})}catch(n){return process.stderr.write(`[${this.logPrefix}] retry-queue lock mkdir failed: ${n}
13
- `),!1}for(;Date.now()-t<er;)try{let n=y.default.openSync(this.lockPath,"wx");return y.default.writeSync(n,String(process.pid)),y.default.closeSync(n),!0}catch(n){if(n?.code!=="EEXIST")return process.stderr.write(`[${this.logPrefix}] retry-queue lock open failed: ${n}
14
- `),!1;try{let i=y.default.statSync(this.lockPath);if(Date.now()-i.mtimeMs>3e4){y.default.unlinkSync(this.lockPath);continue}}catch{}let r=tr,o=Date.now()+r;for(;Date.now()<o;);}return!1}release(){try{y.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=se)return;let n=t.length-se;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${n} oldest entries
15
- `),this.rewrite(t.slice(n))}};x.DiskRetryQueue=Pe;var Se=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>se&&this.entries.splice(0,this.entries.length-se)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};x.MemoryRetryQueue=Se});var _t=T(m=>{"use strict";Object.defineProperty(m,"__esModule",{value:!0});m.MemoryTransport=m.DiskTransport=m.MAX_POST_BYTES=void 0;m.parseHeadersEnv=ht;m.envOptionsResolver=gt;m.postOtlp=Z;var dt=Te(),pt=Ee(),nr=5e3;m.MAX_POST_BYTES=900*1024;function ie(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function mt(e,t,n){let r=[],o=[],i=[],s=0;for(let a of e){let u=t(a);if(u>n){o.push(a);continue}i.length>0&&s+u>n&&(r.push(i),i=[],s=0),i.push(a),s+=u}return i.length>0&&r.push(i),{chunks:r,oversize:o}}function ht(e){if(!e)return{};if(typeof e=="object")return{...e};let t={};for(let n of e.split(",")){let[r,...o]=n.split("=");r&&o.length>0&&(t[r.trim()]=o.join("=").trim())}return t}function gt(){let e=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,n;return e?n=e.replace(/\/+$/,""):t&&(n=t.replace(/\/+$/,"")+"/v1/traces"),n?{endpoint:n,headers:ht(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function Z(e,t,n){let r=new AbortController,o=setTimeout(()=>r.abort(),nr);try{let i=await fetch(t.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(e),signal:r.signal});if(!i.ok){let s="";try{s=(await i.text()).slice(0,200)}catch{}let a=i.status===401||i.status===403?" \u2014 check OTEL_EXPORTER_OTLP_HEADERS (relay token)":i.status===404?" \u2014 check OTEL_EXPORTER_OTLP_TRACES_ENDPOINT path":i.status>=500?" \u2014 collector may be down":"";return process.stderr.write(`[${n}] OTLP POST ${i.status} ${t.endpoint}${a}${s?` body=${s}`:""}
12
+ `)}}tryAcquireLock(){let t=Date.now();try{g.default.mkdirSync(oe.default.dirname(this.lockPath),{recursive:!0})}catch(n){return process.stderr.write(`[${this.logPrefix}] retry-queue lock mkdir failed: ${n}
13
+ `),!1}for(;Date.now()-t<Kn;)try{let n=g.default.openSync(this.lockPath,"wx");return g.default.writeSync(n,String(process.pid)),g.default.closeSync(n),!0}catch(n){if(n?.code!=="EEXIST")return process.stderr.write(`[${this.logPrefix}] retry-queue lock open failed: ${n}
14
+ `),!1;try{let i=g.default.statSync(this.lockPath);if(Date.now()-i.mtimeMs>3e4){g.default.unlinkSync(this.lockPath);continue}}catch{}let r=Wn,o=Date.now()+r;for(;Date.now()<o;);}return!1}release(){try{g.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=se)return;let n=t.length-se;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${n} oldest entries
15
+ `),this.rewrite(t.slice(n))}};D.DiskRetryQueue=_e;var ye=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>se&&this.entries.splice(0,this.entries.length-se)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};D.MemoryRetryQueue=ye});var ft=T(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.MemoryTransport=d.DiskTransport=d.MAX_POST_BYTES=void 0;d.parseHeadersEnv=ut;d.envOptionsResolver=lt;d.postOtlp=W;var it=ve(),at=ge(),Hn=5e3;d.MAX_POST_BYTES=900*1024;function ie(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function ct(e,t,n){let r=[],o=[],i=[],s=0;for(let a of e){let u=t(a);if(u>n){o.push(a);continue}i.length>0&&s+u>n&&(r.push(i),i=[],s=0),i.push(a),s+=u}return i.length>0&&r.push(i),{chunks:r,oversize:o}}function ut(e){if(!e)return{};if(typeof e=="object")return{...e};let t={};for(let n of e.split(",")){let[r,...o]=n.split("=");r&&o.length>0&&(t[r.trim()]=o.join("=").trim())}return t}function lt(){let e=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,n;return e?n=e.replace(/\/+$/,""):t&&(n=t.replace(/\/+$/,"")+"/v1/traces"),n?{endpoint:n,headers:ut(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function W(e,t,n){let r=new AbortController,o=setTimeout(()=>r.abort(),Hn);try{let i=await fetch(t.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(e),signal:r.signal});if(!i.ok){let s="";try{s=(await i.text()).slice(0,200)}catch{}let a=i.status===401||i.status===403?" \u2014 check OTEL_EXPORTER_OTLP_HEADERS (relay token)":i.status===404?" \u2014 check OTEL_EXPORTER_OTLP_TRACES_ENDPOINT path":i.status>=500?" \u2014 collector may be down":"";return process.stderr.write(`[${n}] OTLP POST ${i.status} ${t.endpoint}${a}${s?` body=${s}`:""}
16
16
  `),!1}return!0}catch(i){return process.stderr.write(`[${n}] OTLP POST failed: ${i.message??String(i)}
17
- `),!1}finally{clearTimeout(o)}}var be=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new dt.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??gt}async send(t){let n=this.resolveOptions();if(!n||this.dropIfOversized(t))return;await Z(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(t&&this.queue.tryAcquireLock())try{let n=this.queue.readAll();if(n.length===0)return;let{chunks:r,oversize:o}=mt(n,a=>ie(a.payload),m.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized retry ${o.length===1?"entry":"entries"} (each > ${m.MAX_POST_BYTES} bytes \u2014 the backend caps the request body, so they can never be delivered)
18
- `);let i=[].concat(...r),s=0;for(let a of r){if(!await Z((0,pt.mergeBatch)(a.map(l=>l.payload)),t,this.logPrefix))break;s+=a.length}this.queue.rewrite(i.slice(s))}catch(n){process.stderr.write(`[${this.logPrefix}] flush failed: ${n?.message??String(n)}
19
- `)}finally{this.queue.release()}}dropIfOversized(t){let n=ie(t);return n<=m.MAX_POST_BYTES?!1:(process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (${n} > ${m.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
20
- `),!0)}};m.DiskTransport=be;var Oe=class{queue=new dt.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let n=this.resolveOptions();if(!n)return;if(ie(t)>m.MAX_POST_BYTES){process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (> ${m.MAX_POST_BYTES} bytes) \u2014 undeliverable, not buffered
21
- `);return}await Z(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(!t)return;let n=this.queue.drain();if(n.length===0)return;let{chunks:r,oversize:o}=mt(n,ie,m.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${m.MAX_POST_BYTES} bytes \u2014 undeliverable)
22
- `);let i=[].concat(...r),s=0;for(let a of r){if(!await Z((0,pt.mergeBatch)(a),t,this.logPrefix))break;s+=a.length}for(let a of i.slice(s))this.queue.enqueue(a)}};m.MemoryTransport=Oe});var Me=T(I=>{"use strict";var we=I&&I.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(I,"__esModule",{value:!0});I.TraceManager=void 0;I.generateUlid=vt;var yt=we(v("fs")),rr=we(v("path")),or=we(v("crypto")),sr=re(),ke="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function vt(){let e=Date.now(),t="",n=e;for(let i=0;i<10;i++)t=ke[n&31]+t,n=Math.floor(n/32);let r=or.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=ke[r[i]&31];for(;o.length<16;)o+=ke[0];return t+o}var Ae=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=vt();return this.save(t),t}currentTrace(){try{let t=yt.default.readFileSync(this.tracePath,"utf-8"),{traceId:n}=JSON.parse(t);if(n)return n}catch{}return this.newTrace()}save(t){try{yt.default.mkdirSync(rr.default.dirname(this.tracePath),{recursive:!0}),(0,sr.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(n){process.stderr.write(`[pinta-core] trace persistence failed: ${n}
23
- `)}}};I.TraceManager=Ae});var bt=T(N=>{"use strict";var Pt=N&&N.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(N,"__esModule",{value:!0});N.MemorySessionTraceManager=N.DiskSessionTraceManager=void 0;var Et=Pt(v("fs")),ir=Pt(v("path")),St=Me(),ar=re(),Tt=200,Re=class{tracePath;maxSessions;constructor(t,n={}){this.tracePath=t,this.maxSessions=n.maxSessions??Tt}read(){try{let t=JSON.parse(Et.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{Et.default.mkdirSync(ir.default.dirname(this.tracePath),{recursive:!0});let n=Object.entries(t),r=n.length>this.maxSessions?Object.fromEntries(n.slice(-this.maxSessions)):t;(0,ar.atomicWriteFileSync)(this.tracePath,JSON.stringify(r))}catch{}}newTrace(t){let n=t||"default",r=(0,St.generateUlid)(),o=this.read();return o[n]=r,this.write(o),r}currentTrace(t){let n=t||"default",r=this.read()[n];return r||this.newTrace(n)}};N.DiskSessionTraceManager=Re;var De=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??Tt}newTrace(t){let n=t||"default",r=(0,St.generateUlid)();if(this.map.set(n,r),this.map.size>this.maxSessions){let o=this.map.keys().next().value;o!==void 0&&this.map.delete(o)}return r}currentTrace(t){let n=t||"default";return this.map.get(n)??this.newTrace(n)}};N.MemorySessionTraceManager=De});var At=T(C=>{"use strict";var xe=C&&C.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(C,"__esModule",{value:!0});C.envFilePath=lr;C.parseEnvFile=kt;C.loadEnvFile=fr;var cr=xe(v("node:fs")),ur=xe(v("node:os")),Ot=xe(v("node:path"));function lr(e,t,n){let r=n?process.env[n]:void 0,o=r&&r.length>0?r:Ot.default.join(ur.default.homedir(),e);return Ot.default.join(o,t)}function kt(e){let t={};for(let n of e.split(`
24
- `)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.indexOf("=");if(o<0)continue;let i=r.slice(0,o).trim(),s=r.slice(o+1).trim();(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),i&&(t[i]=s)}return t}function fr(e){let t;try{t=cr.default.readFileSync(e,"utf-8")}catch{return}let n=kt(t);for(let[r,o]of Object.entries(n))process.env[r]===void 0&&(process.env[r]=o)}});var b=T(c=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});c.loadEnvFile=c.parseEnvFile=c.envFilePath=c.MemorySessionTraceManager=c.DiskSessionTraceManager=c.generateUlid=c.TraceManager=c.MAX_POST_BYTES=c.parseHeadersEnv=c.envOptionsResolver=c.postOtlp=c.MemoryTransport=c.DiskTransport=c.MemoryRetryQueue=c.DiskRetryQueue=c.GUARD_BUDGET_HEADER=c.GUARD_STATUS_REFUSED=c.evaluateGuard=c.MAX_SPAN_BYTES=c.enforceSpanBudget=c.mergeBatch=c.attachGuard=c.buildPayload=c.clientAttrs=c.guardAttrs=c.attrsFromRecord=c.toOtlpValue=c.snakeCase=c.newSpanId=c.ulidToTraceId=c.MAX_BYTES=c.PATTERNS=c.applyMatches=c.resolveOverlaps=c.collectMatches=c.truncateTo=c.truncate=c.redact=void 0;var j=ge();Object.defineProperty(c,"redact",{enumerable:!0,get:function(){return j.redact}});Object.defineProperty(c,"truncate",{enumerable:!0,get:function(){return j.truncate}});Object.defineProperty(c,"truncateTo",{enumerable:!0,get:function(){return j.truncateTo}});Object.defineProperty(c,"collectMatches",{enumerable:!0,get:function(){return j.collectMatches}});Object.defineProperty(c,"resolveOverlaps",{enumerable:!0,get:function(){return j.resolveOverlaps}});Object.defineProperty(c,"applyMatches",{enumerable:!0,get:function(){return j.applyMatches}});Object.defineProperty(c,"PATTERNS",{enumerable:!0,get:function(){return j.PATTERNS}});Object.defineProperty(c,"MAX_BYTES",{enumerable:!0,get:function(){return j.MAX_BYTES}});var E=Ee();Object.defineProperty(c,"ulidToTraceId",{enumerable:!0,get:function(){return E.ulidToTraceId}});Object.defineProperty(c,"newSpanId",{enumerable:!0,get:function(){return E.newSpanId}});Object.defineProperty(c,"snakeCase",{enumerable:!0,get:function(){return E.snakeCase}});Object.defineProperty(c,"toOtlpValue",{enumerable:!0,get:function(){return E.toOtlpValue}});Object.defineProperty(c,"attrsFromRecord",{enumerable:!0,get:function(){return E.attrsFromRecord}});Object.defineProperty(c,"guardAttrs",{enumerable:!0,get:function(){return E.guardAttrs}});Object.defineProperty(c,"clientAttrs",{enumerable:!0,get:function(){return E.clientAttrs}});Object.defineProperty(c,"buildPayload",{enumerable:!0,get:function(){return E.buildPayload}});Object.defineProperty(c,"attachGuard",{enumerable:!0,get:function(){return E.attachGuard}});Object.defineProperty(c,"mergeBatch",{enumerable:!0,get:function(){return E.mergeBatch}});Object.defineProperty(c,"enforceSpanBudget",{enumerable:!0,get:function(){return E.enforceSpanBudget}});Object.defineProperty(c,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return E.MAX_SPAN_BYTES}});var Ne=ut();Object.defineProperty(c,"evaluateGuard",{enumerable:!0,get:function(){return Ne.evaluateGuard}});Object.defineProperty(c,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return Ne.GUARD_STATUS_REFUSED}});Object.defineProperty(c,"GUARD_BUDGET_HEADER",{enumerable:!0,get:function(){return Ne.GUARD_BUDGET_HEADER}});var wt=Te();Object.defineProperty(c,"DiskRetryQueue",{enumerable:!0,get:function(){return wt.DiskRetryQueue}});Object.defineProperty(c,"MemoryRetryQueue",{enumerable:!0,get:function(){return wt.MemoryRetryQueue}});var q=_t();Object.defineProperty(c,"DiskTransport",{enumerable:!0,get:function(){return q.DiskTransport}});Object.defineProperty(c,"MemoryTransport",{enumerable:!0,get:function(){return q.MemoryTransport}});Object.defineProperty(c,"postOtlp",{enumerable:!0,get:function(){return q.postOtlp}});Object.defineProperty(c,"envOptionsResolver",{enumerable:!0,get:function(){return q.envOptionsResolver}});Object.defineProperty(c,"parseHeadersEnv",{enumerable:!0,get:function(){return q.parseHeadersEnv}});Object.defineProperty(c,"MAX_POST_BYTES",{enumerable:!0,get:function(){return q.MAX_POST_BYTES}});var Mt=Me();Object.defineProperty(c,"TraceManager",{enumerable:!0,get:function(){return Mt.TraceManager}});Object.defineProperty(c,"generateUlid",{enumerable:!0,get:function(){return Mt.generateUlid}});var Rt=bt();Object.defineProperty(c,"DiskSessionTraceManager",{enumerable:!0,get:function(){return Rt.DiskSessionTraceManager}});Object.defineProperty(c,"MemorySessionTraceManager",{enumerable:!0,get:function(){return Rt.MemorySessionTraceManager}});var je=At();Object.defineProperty(c,"envFilePath",{enumerable:!0,get:function(){return je.envFilePath}});Object.defineProperty(c,"parseEnvFile",{enumerable:!0,get:function(){return je.parseEnvFile}});Object.defineProperty(c,"loadEnvFile",{enumerable:!0,get:function(){return je.loadEnvFile}})});import{realpathSync as no}from"node:fs";import{pathToFileURL as ro}from"node:url";var Q=k(b());function dr(){return(0,Q.envFilePath)(".claude","pinta-cc.env")}function Dt(e=dr()){(0,Q.loadEnvFile)(e)}function xt(){process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT&&!process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT&&(process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT),process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&!process.env.OTEL_EXPORTER_OTLP_HEADERS&&(process.env.OTEL_EXPORTER_OTLP_HEADERS=`x-pinta-relay-token=${process.env.CLAUDE_PLUGIN_OPTION_API_KEY}`),!process.env.PINTA_RELAY_TOKEN&&process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&(process.env.PINTA_RELAY_TOKEN=process.env.CLAUDE_PLUGIN_OPTION_API_KEY)}var jt=k(b());import Nt from"path";function It(){let e=process.env.CLAUDE_PLUGIN_ROOT||process.cwd(),t=process.env.CLAUDE_PLUGIN_DATA||Nt.join(e,".plugin-data");return{pluginRoot:e,pluginData:t,tracePath:Nt.join(t,"trace.json")}}function ae(){return(0,jt.envOptionsResolver)()!==null}function Ct(e){return e.hook_event_name==="PreToolUse"}function Ut(e){return e.hook_event_name==="PostToolUse"||e.hook_event_name==="PostToolUseFailure"}function Bt(e){return e.hook_event_name==="PostToolBatch"}function Lt(e){return e.hook_event_name==="UserPromptSubmit"}function Ft(e){return e.hook_event_name==="SessionStart"||e.hook_event_name==="SessionEnd"}function $t(e){return e.hook_event_name==="SubagentStart"||e.hook_event_name==="SubagentStop"}function qt(e){return e.hook_event_name==="Stop"}function Vt(e){return e.hook_event_name==="PermissionRequest"||e.hook_event_name==="PermissionDenied"}var pr=new Set(["Notification","TaskCreated","TaskCompleted"]);function Gt(e){return pr.has(e.hook_event_name)}var cn=k(b());var zt=k(b()),mr=1e4,hr="pinta-cc/1.10.3-skax.0";function V(e,t){return(0,zt.evaluateGuard)(e,t,{timeoutMs:mr,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:hr})}var ee=k(b());var Yt=k(b()),ce=class extends Yt.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-cc"})}};var Xt=k(b()),ue=class extends Xt.TraceManager{constructor(t){super(t.tracePath)}};import Be from"os";import{spawnSync as gr}from"node:child_process";import{createHash as _r,randomUUID as yr}from"node:crypto";import O from"node:fs";import vr from"node:os";import _ from"node:path";var Jt=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,Er=/^v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)\s+\(Claude Code\)$/m,Pr=2e3,Sr=24*60*60*1e3,Tr=3e4,Ce=8,Ht="claude-version.json",G=new Map;function M(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:"UNKNOWN"}function P(e){process.stderr.write(`[pinta-cc] CLI version: ${e}
25
- `)}function le(e){return M(e)==="ENOENT"||M(e)==="ENOTDIR"}function br(){let e=process.env.CLAUDE_CODE_EXECPATH,t=process.platform==="win32"?["claude.exe","claude.cmd"]:["claude"],n;if(e)n=[e];else{let r=(process.env.PATH??"").split(_.delimiter).filter(o=>_.isAbsolute(o));try{r.push(_.join(vr.homedir(),".local","bin"))}catch(o){P(`native install directory lookup failed (${M(o)})`)}n=r.flatMap(o=>t.map(i=>_.join(o,i)))}for(let r of new Set(n))try{let o=O.realpathSync(r),i=O.statSync(o);if(!i.isFile())continue;return!e&&process.platform!=="win32"&&O.accessSync(o,O.constants.X_OK),{file:o,fingerprint:_r("sha256").update(JSON.stringify([o,i.ino,i.size,i.mtimeMs,i.ctimeMs])).digest("hex")}}catch(o){le(o)||P(`executable lookup failed (${M(o)})`)}return P(e?"configured executable is unavailable":"no Claude executable found in PATH or ~/.local/bin"),null}function Ie(e){let t;try{t=JSON.parse(O.readFileSync(e,"utf8"))}catch(n){return le(n)||P(`package metadata could not be read (${n instanceof SyntaxError?"INVALID_JSON":M(n)})`),null}return typeof t!="object"||t===null||!("name"in t)||!("version"in t)||typeof t.name!="string"||typeof t.version!="string"||!Jt.test(t.version)?null:t.name==="@anthropic-ai/claude-code"||t.name.startsWith("@anthropic-ai/claude-code-")?t.version:null}function Or(e){let t=_.dirname(e),n=_.basename(t)===".bin"&&/^claude(?:\.cmd)?$/i.test(_.basename(e));for(let r=0;r<6;r++){let o=Ie(_.join(t,"package.json"));if(o)return o;if(_.basename(e).toLowerCase()==="claude.cmd"&&r===0){let s=Ie(_.join(t,"node_modules","@anthropic-ai","claude-code","package.json"));if(s)return s}if(n&&_.basename(t)==="node_modules"){let s=Ie(_.join(t,"@anthropic-ai","claude-code","package.json"));if(s)return s}let i=_.dirname(t);if(i===t)break;t=i}return null}function kr(e){return typeof e=="object"&&e!==null&&"fingerprint"in e&&typeof e.fingerprint=="string"&&/^[0-9a-f]{64}$/.test(e.fingerprint)&&"version"in e&&(e.version===null||typeof e.version=="string"&&Jt.test(e.version))&&"checkedAt"in e&&typeof e.checkedAt=="number"&&Number.isFinite(e.checkedAt)}function Wt(e,t){let n=t-e.checkedAt;return n>=0&&n<(e.version===null?Tr:Sr)}function Ar(e){if(!e)return[];let t=_.join(e,Ht);try{if(O.statSync(t).size>16384)return P("oversized version cache ignored"),[];let n=JSON.parse(O.readFileSync(t,"utf8"));if(Array.isArray(n)&&n.length<=Ce&&n.every(kr))return n;P("invalid version cache ignored")}catch(n){le(n)||P(`version cache read failed (${n instanceof SyntaxError?"INVALID_JSON":M(n)})`)}return[]}function Kt(e){for(G.delete(e.fingerprint),G.set(e.fingerprint,e);G.size>Ce;){let t=G.keys().next().value;t!==void 0&&G.delete(t)}}function wr(e,t){if(!e)return;let n=_.join(e,Ht),r=`${n}.${process.pid}.${yr()}.tmp`;try{O.mkdirSync(e,{recursive:!0,mode:448}),O.writeFileSync(r,JSON.stringify(t),{encoding:"utf8",mode:384,flag:"wx"}),O.renameSync(r,n)}catch(o){P(`version cache write failed (${M(o)})`)}finally{try{O.unlinkSync(r)}catch(o){le(o)||P(`temporary version cache cleanup failed (${M(o)})`)}}}function Mr(e){if(/\.(cmd|bat|ps1)$/i.test(e))return P("command shim has no readable Claude package metadata"),null;let t=gr(e,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:!1,windowsHide:!0,timeout:Pr,killSignal:"SIGKILL",maxBuffer:4096});if(t.error||t.status!==0)return P(`version probe failed (${t.error?M(t.error):`exit ${t.status??t.signal}`})`),null;let n=Er.exec(t.stdout.trim())?.[1];return n||(P("version probe did not identify Claude Code"),null)}function Zt(e){let t=br();if(!t)return"unknown";let n=Or(t.file);if(n)return n;let r=Date.now(),o=Ar(e),i=[G.get(t.fingerprint),...o].find(a=>a&&a.fingerprint===t.fingerprint&&Wt(a,r));if(i)return Kt(i),i.version??"unknown";let s={fingerprint:t.fingerprint,version:Mr(t.file),checkedAt:Date.now()};return Kt(s),wr(e,[...o.filter(a=>a.fingerprint!==s.fingerprint&&Wt(a,s.checkedAt)),s].slice(-Ce)),s.version??"unknown"}import B from"node:path";import R from"node:fs";import Qt from"node:path";var Rr=new Set(["","unknown","undefined","null","n/a","none","auto","default"]),Dr=256*1024,xr=1024*1024,Nr=4096;function U(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function Ue(e){let t=U(e),n=t?"id"in t?t.id:t.name:e;if(typeof n!="string")return;let r=n.trim();if(!(r.startsWith("{")||r.startsWith("[")))return r.length<=512&&!/[\u0000-\u001f\u007f]/.test(r)&&!Rr.has(r.toLowerCase())?r:void 0}function en(e,t){delete e.model,t&&(e.model=t.name,!(t.source==="hook.model"&&e.model_source!==void 0)&&(e.model_source!==void 0&&(e.model_original_source=e.model_source),e.model_source=t.source))}function z(e){return typeof e=="string"&&/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,255}$/.test(e)?e:void 0}function fe(e){let t=typeof e=="number"?e:typeof e=="string"&&/^\d{4}-\d{2}-\d{2}T/.test(e)?Date.parse(e):NaN;return Number.isFinite(t)&&t>=0?t:void 0}function tn(e,t){let n=e.timestamp===void 0?fe(t):fe(e.timestamp);return n!==void 0&&n<=t?n:void 0}function nn(e){if(typeof e!="string"||e.length>4096||/[\u0000-\u001f]/.test(e)||!Qt.isAbsolute(e)||Qt.extname(e)!==".jsonl")return;let t;try{t=R.openSync(e,R.constants.O_RDONLY|R.constants.O_NONBLOCK|(R.constants.O_NOFOLLOW??0));let n=R.fstatSync(t);if(!n.isFile()||!Number.isSafeInteger(n.size)||n.size<=0)return;let r=Buffer.alloc(Math.min(n.size,Dr));if(R.readSync(t,r,0,r.length,0)!==r.length)return;let o=r.indexOf(10),i;if(o>=0)try{i=U(JSON.parse(r.toString("utf8",0,o)))}catch{}let s=Math.max(0,n.size-xr),a=n.size<=r.length?r:Buffer.alloc(n.size-s);if(a!==r&&R.readSync(t,a,0,a.length,s)!==a.length)return;let u=R.fstatSync(t);if(u.size<n.size||u.size===n.size&&u.mtimeMs!==n.mtimeMs)return;let l=s>0?a.indexOf(10)+1:0,d=a.lastIndexOf(10);if(s>0&&l===0||d<l)return;let f=[],p=0;for(;d>l&&p<Nr;){let A=a.lastIndexOf(10,d-1),W=Math.max(l,A+1),Fe=a.toString("utf8",W,d).trim();if(Fe){let $e=U(JSON.parse(Fe));$e&&f.push($e)}d=W-1,p++}return f.reverse(),{first:i,rows:f,complete:s===0&&d<0&&a[a.length-1]===10}}catch{return}finally{if(t!==void 0)try{R.closeSync(t)}catch{}}}function rn(e){let t=e[0];return t&&e.every(n=>n?.name===t.name)?t:void 0}var jr=new Set(["PreToolUse","PostToolUse","PostToolUseFailure","PermissionRequest","PermissionDenied"]);function Ir(e,t){let n=B.dirname(e);if(B.basename(n)!=="subagents"||B.basename(B.dirname(n))!==t)return;let r=/^agent-(.+)\.jsonl$/.exec(B.basename(e));return z(r?.[1])}function on(e,t){let n=Ue(e.model);if(n)return{name:n,source:"hook.model"};try{return Cr(e,t)}catch{return}}function Cr(e,t){if(!jr.has(e.hook_event_name))return;let n=z(e.session_id),r=z(e.tool_use_id),o=tn(e,t);if(!n||!r||o===void 0||typeof e.transcript_path!="string")return;let i=Ir(e.transcript_path,n),s=e.agent_id===void 0?i:z(e.agent_id);if(e.agent_id!==void 0&&!s||i!==void 0&&i!==s||!s&&e.agent_type!==void 0||B.basename(B.dirname(e.transcript_path))==="subagents"&&!i)return;let a=nn(e.transcript_path);if(!a)return;let u=[];for(let l of a.rows){let d=fe(l.timestamp);if(l.type!=="assistant"||l.sessionId!==n||d===void 0||d>o)continue;let f=l.agentId===void 0?void 0:z(l.agentId);if(f!==s||l.agentId!==void 0&&!f||l.isSidechain===!0&&!s)continue;let p=U(l.message);if(!p||p.role!==void 0&&p.role!=="assistant"||!Array.isArray(p.content)||!p.content.some(W=>U(W)?.type==="tool_use"&&U(W)?.id===r))continue;let A=Ue(p.model);u.push(A?{name:A,source:"transcript.assistant.message"}:void 0)}return rn(u)}var Y=k(b()),de;function Ur(){if(de===void 0)try{de=Be.userInfo().username}catch{de=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return de}var sn="1.10.3-skax.0",Br=new Set(["cc.hook","cc.tool_name","cc.tool_use_id","cc.session_id","cc.transcript_path","cc.cwd","cc.permission_mode"]),Lr=new Set(["cc.tool_input","cc.tool_response","cc.tool_calls"]),Fr={skipRedactKeys:Br,bashContextKeys:Lr,outputForKey:(e,t)=>{if(e==="cc.error"||e==="cc.error_message")return t;if(e==="cc.tool_calls"&&Array.isArray(t))return t.map(n=>n&&typeof n=="object"&&"tool_response"in n?n.tool_response:void 0);if(!(e!=="cc.tool_response"&&e!=="cc.tool_result"))return t&&typeof t=="object"&&"file"in t&&t.file&&typeof t.file=="object"&&"content"in t.file&&t.file.content!==void 0?t.file.content:t}};function $r(e,t){let n=[];n.push({key:"ingest.type",value:{stringValue:"cc"}}),n.push({key:"cc.hook",value:{stringValue:e.hook_event_name}});let r={};for(let[o,i]of Object.entries(e))o!=="hook_event_name"&&(r[o]=i);return en(r,on(e,t)),n.push(...(0,Y.attrsFromRecord)(r,"cc",Fr)),n}function qr(e){return[{key:"service.name",value:{stringValue:"claude-code"}},{key:"service.version",value:{stringValue:Zt(e)}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-cc"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:sn}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:Ur()}},{key:"host.name",value:{stringValue:Be.hostname()}},{key:"host.arch",value:{stringValue:Be.arch()}}]}function an(e){let t=e.now??Date.now();return(0,Y.buildPayload)({traceId:e.traceId,spanName:`cc.${(0,Y.snakeCase)(e.event.hook_event_name)}`,attributes:$r(e.event,t),resource:qr(e.versionCacheDir),scope:{name:"pinta-cc",version:sn},now:t})}function L(e,t,n={}){let r=new ue(t),o=n.traceMode==="new"?r.newTrace():r.currentTrace();return an({event:e,traceId:o,versionCacheDir:t.pluginData})}async function F(e,t){if(!ae())return;let n=new ce(t);await n.flush(),await n.send(e)}function X(e,t){if(!ae())return;let n=Buffer.byteLength(JSON.stringify(e),"utf-8");if(n>ee.MAX_POST_BYTES){process.stderr.write(`[pinta-cc] dropping oversized span payload (${n} > ${ee.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
26
- `);return}new ee.DiskRetryQueue(t.pluginData,"pinta-cc").enqueue(e)}async function S(e,t,n={}){ae()&&await F(L(e,t,n),t)}async function un(e,t){let n=L(e,t),r=await V(n,process.env.PINTA_GUARD_ENDPOINT);if(r?.decision==="DENY"){let i={hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:r.userMessage??r.reason??"guard_deny"}};process.stdout.write(JSON.stringify(i)+`
27
- `)}try{if((0,cn.attachGuard)(n,r),r?.decision==="DENY")return X(n,t),0;await F(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
28
- `)}return 0}var ln=k(b());async function fn(e,t){if(e.hook_event_name==="PostToolUseFailure")return await S(e,t),0;let n=L(e,t),r=await V(n,process.env.PINTA_GUARD_ENDPOINT);r?.decision==="DENY"&&process.stdout.write(JSON.stringify({continue:!1,stopReason:"Pinta blocked this tool output. Start a new session before continuing."})+`
29
- `);try{if((0,ln.attachGuard)(n,r),r&&n.resourceSpans[0].scopeSpans[0].spans[0].attributes.push({key:"pinta.guard.target",value:{stringValue:"tool_output"}}),r?.decision==="DENY")return X(n,t),0;await F(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
30
- `)}return 0}async function dn(e,t){return await S(e,t,{traceMode:"new"}),0}async function pn(e,t){return await S(e,t),0}async function mn(e,t){return await S(e,t),0}async function hn(e,t){return await S(e,t),0}var gn=k(b());async function _n(e,t){if(e.hook_event_name==="PermissionDenied")return await S(e,t),0;let n=L(e,t),r=await V(n,process.env.PINTA_GUARD_ENDPOINT);r?.decision==="DENY"&&process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"deny",message:r.userMessage??r.reason??"guard_deny"}}})+`
31
- `);try{if((0,gn.attachGuard)(n,r),r?.decision==="DENY")return X(n,t),0;await F(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
32
- `)}return 0}async function Le(e){return 0}async function Vr(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function yn(){xt();let e=0;try{let t=It(),n=await Vr(),r=JSON.parse(n);Gt(r)?e=await Le(r):Ct(r)?e=await un(r,t):Ut(r)||Bt(r)?e=await fn(r,t):Lt(r)?e=await dn(r,t):Ft(r)?e=await pn(r,t):$t(r)?e=await mn(r,t):qt(r)?e=await hn(r,t):Vt(r)?e=await _n(r,t):e=await Le(r)}catch(t){process.stderr.write(`[pinta-cc] error: ${t}
33
- `),e=0}return e}import{opendir as Gr,stat as zr}from"node:fs/promises";import{homedir as Yr}from"node:os";import te from"node:path";var Xr="pinta-cc",vn="memory";function Wr(){let e=process.env.CLAUDE_CONFIG_DIR;return e&&e.length>0?e:te.join(Yr(),".claude")}function Kr(){return te.join(Wr(),"projects")}function Jr(e,t){return te.relative(e,t).split(te.sep).join("/")}function Hr(e){return e.endsWith(".jsonl")?"append-log":"rewritten-doc"}function Zr(e){let t=e.split("/");if(t.length<2)return{};let n=t[0],r=t[1];return t.length===2?r.endsWith(".jsonl")?{projectKey:n,sessionId:r.slice(0,-6)}:{projectKey:n}:r===vn?{projectKey:n}:{projectKey:n,sessionId:r}}function Qr(e){return e.endsWith(".jsonl")?"session-log":e.split("/")[1]===vn?"memory":e.endsWith(".json")?"meta":"other"}async function En(){return[Kr()]}async function*Pn(e,t){let n;try{n=await Gr(t)}catch{return}try{for await(let r of n){let o=te.join(t,r.name);r.isDirectory()?yield*Pn(e,o):r.isFile()&&(yield{absPath:o,relPath:Jr(e,o)})}}catch{return}}async function*eo(e){let[t]=await En(),n=e.since?.getTime();for await(let{absPath:r,relPath:o}of Pn(t,t)){let i;try{i=await zr(r)}catch{continue}if(n!==void 0&&i.mtime.getTime()<=n)continue;let{projectKey:s,sessionId:a}=Zr(o);yield{relPath:o,absPath:r,size:i.size,mtime:i.mtime,sessionId:a,projectKey:s,semantics:Hr(o)}}}var to={id:Xr,roots:En,scan:eo,classify:Qr};Dt();function oo(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===ro(no(e)).href}catch{return!1}}async function so(){let e=await yn();process.exit(e)}oo()&&so();export{to as lifecycle};
17
+ `),!1}finally{clearTimeout(o)}}var Ee=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new it.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??lt}async send(t){let n=this.resolveOptions();if(!n||this.dropIfOversized(t))return;await W(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(t&&this.queue.tryAcquireLock())try{let n=this.queue.readAll();if(n.length===0)return;let{chunks:r,oversize:o}=ct(n,a=>ie(a.payload),d.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized retry ${o.length===1?"entry":"entries"} (each > ${d.MAX_POST_BYTES} bytes \u2014 the backend caps the request body, so they can never be delivered)
18
+ `);let i=[].concat(...r),s=0;for(let a of r){if(!await W((0,at.mergeBatch)(a.map(l=>l.payload)),t,this.logPrefix))break;s+=a.length}this.queue.rewrite(i.slice(s))}catch(n){process.stderr.write(`[${this.logPrefix}] flush failed: ${n?.message??String(n)}
19
+ `)}finally{this.queue.release()}}dropIfOversized(t){let n=ie(t);return n<=d.MAX_POST_BYTES?!1:(process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (${n} > ${d.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
20
+ `),!0)}};d.DiskTransport=Ee;var Pe=class{queue=new it.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let n=this.resolveOptions();if(!n)return;if(ie(t)>d.MAX_POST_BYTES){process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (> ${d.MAX_POST_BYTES} bytes) \u2014 undeliverable, not buffered
21
+ `);return}await W(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(!t)return;let n=this.queue.drain();if(n.length===0)return;let{chunks:r,oversize:o}=ct(n,ie,d.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${d.MAX_POST_BYTES} bytes \u2014 undeliverable)
22
+ `);let i=[].concat(...r),s=0;for(let a of r){if(!await W((0,at.mergeBatch)(a),t,this.logPrefix))break;s+=a.length}for(let a of i.slice(s))this.queue.enqueue(a)}};d.MemoryTransport=Pe});var Oe=T(j=>{"use strict";var be=j&&j.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(j,"__esModule",{value:!0});j.TraceManager=void 0;j.generateUlid=pt;var dt=be(v("fs")),Zn=be(v("path")),Jn=be(v("crypto")),Qn=re(),Se="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function pt(){let e=Date.now(),t="",n=e;for(let i=0;i<10;i++)t=Se[n&31]+t,n=Math.floor(n/32);let r=Jn.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=Se[r[i]&31];for(;o.length<16;)o+=Se[0];return t+o}var Te=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=pt();return this.save(t),t}currentTrace(){try{let t=dt.default.readFileSync(this.tracePath,"utf-8"),{traceId:n}=JSON.parse(t);if(n)return n}catch{}return this.newTrace()}save(t){try{dt.default.mkdirSync(Zn.default.dirname(this.tracePath),{recursive:!0}),(0,Qn.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(n){process.stderr.write(`[pinta-core] trace persistence failed: ${n}
23
+ `)}}};j.TraceManager=Te});var yt=T(x=>{"use strict";var ht=x&&x.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(x,"__esModule",{value:!0});x.MemorySessionTraceManager=x.DiskSessionTraceManager=void 0;var mt=ht(v("fs")),er=ht(v("path")),gt=Oe(),tr=re(),_t=200,ke=class{tracePath;maxSessions;constructor(t,n={}){this.tracePath=t,this.maxSessions=n.maxSessions??_t}read(){try{let t=JSON.parse(mt.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{mt.default.mkdirSync(er.default.dirname(this.tracePath),{recursive:!0});let n=Object.entries(t),r=n.length>this.maxSessions?Object.fromEntries(n.slice(-this.maxSessions)):t;(0,tr.atomicWriteFileSync)(this.tracePath,JSON.stringify(r))}catch{}}newTrace(t){let n=t||"default",r=(0,gt.generateUlid)(),o=this.read();return o[n]=r,this.write(o),r}currentTrace(t){let n=t||"default",r=this.read()[n];return r||this.newTrace(n)}};x.DiskSessionTraceManager=ke;var Ae=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??_t}newTrace(t){let n=t||"default",r=(0,gt.generateUlid)();if(this.map.set(n,r),this.map.size>this.maxSessions){let o=this.map.keys().next().value;o!==void 0&&this.map.delete(o)}return r}currentTrace(t){let n=t||"default";return this.map.get(n)??this.newTrace(n)}};x.MemorySessionTraceManager=Ae});var Pt=T(N=>{"use strict";var we=N&&N.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(N,"__esModule",{value:!0});N.envFilePath=or;N.parseEnvFile=Et;N.loadEnvFile=sr;var nr=we(v("node:fs")),rr=we(v("node:os")),vt=we(v("node:path"));function or(e,t,n){let r=n?process.env[n]:void 0,o=r&&r.length>0?r:vt.default.join(rr.default.homedir(),e);return vt.default.join(o,t)}function Et(e){let t={};for(let n of e.split(`
24
+ `)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.indexOf("=");if(o<0)continue;let i=r.slice(0,o).trim(),s=r.slice(o+1).trim();(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),i&&(t[i]=s)}return t}function sr(e){let t;try{t=nr.default.readFileSync(e,"utf-8")}catch{return}let n=Et(t);for(let[r,o]of Object.entries(n))process.env[r]===void 0&&(process.env[r]=o)}});var b=T(c=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});c.loadEnvFile=c.parseEnvFile=c.envFilePath=c.MemorySessionTraceManager=c.DiskSessionTraceManager=c.generateUlid=c.TraceManager=c.MAX_POST_BYTES=c.parseHeadersEnv=c.envOptionsResolver=c.postOtlp=c.MemoryTransport=c.DiskTransport=c.MemoryRetryQueue=c.DiskRetryQueue=c.GUARD_BUDGET_HEADER=c.GUARD_STATUS_REFUSED=c.evaluateGuard=c.MAX_SPAN_BYTES=c.enforceSpanBudget=c.mergeBatch=c.attachGuard=c.buildPayload=c.clientAttrs=c.guardAttrs=c.attrsFromRecord=c.toOtlpValue=c.snakeCase=c.newSpanId=c.ulidToTraceId=c.MAX_BYTES=c.PATTERNS=c.applyMatches=c.resolveOverlaps=c.collectMatches=c.truncateTo=c.truncate=c.redact=void 0;var M=me();Object.defineProperty(c,"redact",{enumerable:!0,get:function(){return M.redact}});Object.defineProperty(c,"truncate",{enumerable:!0,get:function(){return M.truncate}});Object.defineProperty(c,"truncateTo",{enumerable:!0,get:function(){return M.truncateTo}});Object.defineProperty(c,"collectMatches",{enumerable:!0,get:function(){return M.collectMatches}});Object.defineProperty(c,"resolveOverlaps",{enumerable:!0,get:function(){return M.resolveOverlaps}});Object.defineProperty(c,"applyMatches",{enumerable:!0,get:function(){return M.applyMatches}});Object.defineProperty(c,"PATTERNS",{enumerable:!0,get:function(){return M.PATTERNS}});Object.defineProperty(c,"MAX_BYTES",{enumerable:!0,get:function(){return M.MAX_BYTES}});var E=ge();Object.defineProperty(c,"ulidToTraceId",{enumerable:!0,get:function(){return E.ulidToTraceId}});Object.defineProperty(c,"newSpanId",{enumerable:!0,get:function(){return E.newSpanId}});Object.defineProperty(c,"snakeCase",{enumerable:!0,get:function(){return E.snakeCase}});Object.defineProperty(c,"toOtlpValue",{enumerable:!0,get:function(){return E.toOtlpValue}});Object.defineProperty(c,"attrsFromRecord",{enumerable:!0,get:function(){return E.attrsFromRecord}});Object.defineProperty(c,"guardAttrs",{enumerable:!0,get:function(){return E.guardAttrs}});Object.defineProperty(c,"clientAttrs",{enumerable:!0,get:function(){return E.clientAttrs}});Object.defineProperty(c,"buildPayload",{enumerable:!0,get:function(){return E.buildPayload}});Object.defineProperty(c,"attachGuard",{enumerable:!0,get:function(){return E.attachGuard}});Object.defineProperty(c,"mergeBatch",{enumerable:!0,get:function(){return E.mergeBatch}});Object.defineProperty(c,"enforceSpanBudget",{enumerable:!0,get:function(){return E.enforceSpanBudget}});Object.defineProperty(c,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return E.MAX_SPAN_BYTES}});var Re=rt();Object.defineProperty(c,"evaluateGuard",{enumerable:!0,get:function(){return Re.evaluateGuard}});Object.defineProperty(c,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return Re.GUARD_STATUS_REFUSED}});Object.defineProperty(c,"GUARD_BUDGET_HEADER",{enumerable:!0,get:function(){return Re.GUARD_BUDGET_HEADER}});var St=ve();Object.defineProperty(c,"DiskRetryQueue",{enumerable:!0,get:function(){return St.DiskRetryQueue}});Object.defineProperty(c,"MemoryRetryQueue",{enumerable:!0,get:function(){return St.MemoryRetryQueue}});var $=ft();Object.defineProperty(c,"DiskTransport",{enumerable:!0,get:function(){return $.DiskTransport}});Object.defineProperty(c,"MemoryTransport",{enumerable:!0,get:function(){return $.MemoryTransport}});Object.defineProperty(c,"postOtlp",{enumerable:!0,get:function(){return $.postOtlp}});Object.defineProperty(c,"envOptionsResolver",{enumerable:!0,get:function(){return $.envOptionsResolver}});Object.defineProperty(c,"parseHeadersEnv",{enumerable:!0,get:function(){return $.parseHeadersEnv}});Object.defineProperty(c,"MAX_POST_BYTES",{enumerable:!0,get:function(){return $.MAX_POST_BYTES}});var Tt=Oe();Object.defineProperty(c,"TraceManager",{enumerable:!0,get:function(){return Tt.TraceManager}});Object.defineProperty(c,"generateUlid",{enumerable:!0,get:function(){return Tt.generateUlid}});var bt=yt();Object.defineProperty(c,"DiskSessionTraceManager",{enumerable:!0,get:function(){return bt.DiskSessionTraceManager}});Object.defineProperty(c,"MemorySessionTraceManager",{enumerable:!0,get:function(){return bt.MemorySessionTraceManager}});var De=Pt();Object.defineProperty(c,"envFilePath",{enumerable:!0,get:function(){return De.envFilePath}});Object.defineProperty(c,"parseEnvFile",{enumerable:!0,get:function(){return De.parseEnvFile}});Object.defineProperty(c,"loadEnvFile",{enumerable:!0,get:function(){return De.loadEnvFile}})});import{realpathSync as Hr}from"node:fs";import{pathToFileURL as Zr}from"node:url";var H=k(b());function ir(){return(0,H.envFilePath)(".claude","pinta-cc.env")}function Ot(e=ir()){(0,H.loadEnvFile)(e)}function kt(){process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT&&!process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT&&(process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT),process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&!process.env.OTEL_EXPORTER_OTLP_HEADERS&&(process.env.OTEL_EXPORTER_OTLP_HEADERS=`x-pinta-relay-token=${process.env.CLAUDE_PLUGIN_OPTION_API_KEY}`),!process.env.PINTA_RELAY_TOKEN&&process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&(process.env.PINTA_RELAY_TOKEN=process.env.CLAUDE_PLUGIN_OPTION_API_KEY)}var wt=k(b());import At from"path";function Rt(){let e=process.env.CLAUDE_PLUGIN_ROOT||process.cwd(),t=process.env.CLAUDE_PLUGIN_DATA||At.join(e,".plugin-data");return{pluginRoot:e,pluginData:t,tracePath:At.join(t,"trace.json")}}function ae(){return(0,wt.envOptionsResolver)()!==null}function Dt(e){return e.hook_event_name==="PreToolUse"}function xt(e){return e.hook_event_name==="PostToolUse"||e.hook_event_name==="PostToolUseFailure"}function Mt(e){return e.hook_event_name==="PostToolBatch"}function jt(e){return e.hook_event_name==="UserPromptSubmit"}function Nt(e){return e.hook_event_name==="SessionStart"||e.hook_event_name==="SessionEnd"}function It(e){return e.hook_event_name==="SubagentStart"||e.hook_event_name==="SubagentStop"}function Ct(e){return e.hook_event_name==="Stop"}function Ut(e){return e.hook_event_name==="PermissionRequest"||e.hook_event_name==="PermissionDenied"}function Bt(e){return typeof e.cursor_version=="string"&&e.cursor_version.trim().length>0}var ar=new Set(["Notification","TaskCreated","TaskCompleted"]);function Lt(e){return ar.has(e.hook_event_name)}var nn=k(b());var $t=k(b()),cr=1e4,ur="pinta-cc/1.10.3";function F(e,t){return(0,$t.evaluateGuard)(e,t,{timeoutMs:cr,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:ur})}var Z=k(b());var Ft=k(b()),ce=class extends Ft.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-cc"})}};var qt=k(b()),ue=class extends qt.TraceManager{constructor(t){super(t.tracePath)}};import Ne from"os";import{spawnSync as lr}from"node:child_process";import{createHash as fr,randomUUID as dr}from"node:crypto";import O from"node:fs";import pr from"node:os";import m from"node:path";var zt=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,mr=/^v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)\s+\(Claude Code\)$/m,hr=2e3,gr=24*60*60*1e3,_r=3e4,Me=8,Yt="claude-version.json",q=new Map;function w(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:"UNKNOWN"}function P(e){process.stderr.write(`[pinta-cc] CLI version: ${e}
25
+ `)}function le(e){return w(e)==="ENOENT"||w(e)==="ENOTDIR"}function yr(){let e=process.env.CLAUDE_CODE_EXECPATH,t=process.platform==="win32"?["claude.exe","claude.cmd"]:["claude"],n;if(e)n=[e];else{let r=(process.env.PATH??"").split(m.delimiter).filter(o=>m.isAbsolute(o));try{r.push(m.join(pr.homedir(),".local","bin"))}catch(o){P(`native install directory lookup failed (${w(o)})`)}n=r.flatMap(o=>t.map(i=>m.join(o,i)))}for(let r of new Set(n))try{let o=O.realpathSync(r),i=O.statSync(o);if(!i.isFile())continue;return!e&&process.platform!=="win32"&&O.accessSync(o,O.constants.X_OK),{file:o,fingerprint:fr("sha256").update(JSON.stringify([o,i.ino,i.size,i.mtimeMs,i.ctimeMs])).digest("hex")}}catch(o){le(o)||P(`executable lookup failed (${w(o)})`)}return P(e?"configured executable is unavailable":"no Claude executable found in PATH or ~/.local/bin"),null}function xe(e){let t;try{t=JSON.parse(O.readFileSync(e,"utf8"))}catch(n){return le(n)||P(`package metadata could not be read (${n instanceof SyntaxError?"INVALID_JSON":w(n)})`),null}return typeof t!="object"||t===null||!("name"in t)||!("version"in t)||typeof t.name!="string"||typeof t.version!="string"||!zt.test(t.version)?null:t.name==="@anthropic-ai/claude-code"||t.name.startsWith("@anthropic-ai/claude-code-")?t.version:null}function vr(e){let t=m.dirname(e),n=m.basename(t)===".bin"&&/^claude(?:\.cmd)?$/i.test(m.basename(e));for(let r=0;r<6;r++){let o=xe(m.join(t,"package.json"));if(o)return o;if(m.basename(e).toLowerCase()==="claude.cmd"&&r===0){let s=xe(m.join(t,"node_modules","@anthropic-ai","claude-code","package.json"));if(s)return s}if(n&&m.basename(t)==="node_modules"){let s=xe(m.join(t,"@anthropic-ai","claude-code","package.json"));if(s)return s}let i=m.dirname(t);if(i===t)break;t=i}return null}function Er(e){return typeof e=="object"&&e!==null&&"fingerprint"in e&&typeof e.fingerprint=="string"&&/^[0-9a-f]{64}$/.test(e.fingerprint)&&"version"in e&&(e.version===null||typeof e.version=="string"&&zt.test(e.version))&&"checkedAt"in e&&typeof e.checkedAt=="number"&&Number.isFinite(e.checkedAt)}function Gt(e,t){let n=t-e.checkedAt;return n>=0&&n<(e.version===null?_r:gr)}function Pr(e){if(!e)return[];let t=m.join(e,Yt);try{if(O.statSync(t).size>16384)return P("oversized version cache ignored"),[];let n=JSON.parse(O.readFileSync(t,"utf8"));if(Array.isArray(n)&&n.length<=Me&&n.every(Er))return n;P("invalid version cache ignored")}catch(n){le(n)||P(`version cache read failed (${n instanceof SyntaxError?"INVALID_JSON":w(n)})`)}return[]}function Vt(e){for(q.delete(e.fingerprint),q.set(e.fingerprint,e);q.size>Me;){let t=q.keys().next().value;t!==void 0&&q.delete(t)}}function Sr(e,t){if(!e)return;let n=m.join(e,Yt),r=`${n}.${process.pid}.${dr()}.tmp`;try{O.mkdirSync(e,{recursive:!0,mode:448}),O.writeFileSync(r,JSON.stringify(t),{encoding:"utf8",mode:384,flag:"wx"}),O.renameSync(r,n)}catch(o){P(`version cache write failed (${w(o)})`)}finally{try{O.unlinkSync(r)}catch(o){le(o)||P(`temporary version cache cleanup failed (${w(o)})`)}}}function Tr(e){if(/\.(cmd|bat|ps1)$/i.test(e))return P("command shim has no readable Claude package metadata"),null;let t=lr(e,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:!1,windowsHide:!0,timeout:hr,killSignal:"SIGKILL",maxBuffer:4096});if(t.error||t.status!==0)return P(`version probe failed (${t.error?w(t.error):`exit ${t.status??t.signal}`})`),null;let n=mr.exec(t.stdout.trim())?.[1];return n||(P("version probe did not identify Claude Code"),null)}function Xt(e){let t=yr();if(!t)return"unknown";let n=vr(t.file);if(n)return n;let r=Date.now(),o=Pr(e),i=[q.get(t.fingerprint),...o].find(a=>a&&a.fingerprint===t.fingerprint&&Gt(a,r));if(i)return Vt(i),i.version??"unknown";let s={fingerprint:t.fingerprint,version:Tr(t.file),checkedAt:Date.now()};return Vt(s),Sr(e,[...o.filter(a=>a.fingerprint!==s.fingerprint&&Gt(a,s.checkedAt)),s].slice(-Me)),s.version??"unknown"}import C from"node:path";import R from"node:fs";import Kt from"node:path";var br=new Set(["","unknown","undefined","null","n/a","none","auto","default"]),Or=256*1024,kr=1024*1024,Ar=4096;function I(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function je(e){let t=I(e),n=t?"id"in t?t.id:t.name:e;if(typeof n!="string")return;let r=n.trim();if(!(r.startsWith("{")||r.startsWith("[")))return r.length<=512&&!/[\u0000-\u001f\u007f]/.test(r)&&!br.has(r.toLowerCase())?r:void 0}function Wt(e,t){delete e.model,t&&(e.model=t.name,!(t.source==="hook.model"&&e.model_source!==void 0)&&(e.model_source!==void 0&&(e.model_original_source=e.model_source),e.model_source=t.source))}function G(e){return typeof e=="string"&&/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,255}$/.test(e)?e:void 0}function fe(e){let t=typeof e=="number"?e:typeof e=="string"&&/^\d{4}-\d{2}-\d{2}T/.test(e)?Date.parse(e):NaN;return Number.isFinite(t)&&t>=0?t:void 0}function Ht(e,t){let n=e.timestamp===void 0?fe(t):fe(e.timestamp);return n!==void 0&&n<=t?n:void 0}function Zt(e){if(typeof e!="string"||e.length>4096||/[\u0000-\u001f]/.test(e)||!Kt.isAbsolute(e)||Kt.extname(e)!==".jsonl")return;let t;try{t=R.openSync(e,R.constants.O_RDONLY|R.constants.O_NONBLOCK|(R.constants.O_NOFOLLOW??0));let n=R.fstatSync(t);if(!n.isFile()||!Number.isSafeInteger(n.size)||n.size<=0)return;let r=Buffer.alloc(Math.min(n.size,Or));if(R.readSync(t,r,0,r.length,0)!==r.length)return;let o=r.indexOf(10),i;if(o>=0)try{i=I(JSON.parse(r.toString("utf8",0,o)))}catch{}let s=Math.max(0,n.size-kr),a=n.size<=r.length?r:Buffer.alloc(n.size-s);if(a!==r&&R.readSync(t,a,0,a.length,s)!==a.length)return;let u=R.fstatSync(t);if(u.size<n.size||u.size===n.size&&u.mtimeMs!==n.mtimeMs)return;let l=s>0?a.indexOf(10)+1:0,f=a.lastIndexOf(10);if(s>0&&l===0||f<l)return;let _=[],y=0;for(;f>l&&y<Ar;){let Q=a.lastIndexOf(10,f-1),Y=Math.max(l,Q+1),Ce=a.toString("utf8",Y,f).trim();if(Ce){let Ue=I(JSON.parse(Ce));Ue&&_.push(Ue)}f=Y-1,y++}return _.reverse(),{first:i,rows:_,complete:s===0&&f<0&&a[a.length-1]===10}}catch{return}finally{if(t!==void 0)try{R.closeSync(t)}catch{}}}function Jt(e){let t=e[0];return t&&e.every(n=>n?.name===t.name)?t:void 0}var wr=new Set(["PreToolUse","PostToolUse","PostToolUseFailure","PermissionRequest","PermissionDenied"]);function Rr(e,t){let n=C.dirname(e);if(C.basename(n)!=="subagents"||C.basename(C.dirname(n))!==t)return;let r=/^agent-(.+)\.jsonl$/.exec(C.basename(e));return G(r?.[1])}function Qt(e,t){let n=je(e.model);if(n)return{name:n,source:"hook.model"};try{return Dr(e,t)}catch{return}}function Dr(e,t){if(!wr.has(e.hook_event_name))return;let n=G(e.session_id),r=G(e.tool_use_id),o=Ht(e,t);if(!n||!r||o===void 0||typeof e.transcript_path!="string")return;let i=Rr(e.transcript_path,n),s=e.agent_id===void 0?i:G(e.agent_id);if(e.agent_id!==void 0&&!s||i!==void 0&&i!==s||!s&&e.agent_type!==void 0||C.basename(C.dirname(e.transcript_path))==="subagents"&&!i)return;let a=Zt(e.transcript_path);if(!a)return;let u=[];for(let l of a.rows){let f=fe(l.timestamp);if(l.type!=="assistant"||l.sessionId!==n||f===void 0||f>o)continue;let _=l.agentId===void 0?void 0:G(l.agentId);if(_!==s||l.agentId!==void 0&&!_||l.isSidechain===!0&&!s)continue;let y=I(l.message);if(!y||y.role!==void 0&&y.role!=="assistant"||!Array.isArray(y.content)||!y.content.some(Y=>I(Y)?.type==="tool_use"&&I(Y)?.id===r))continue;let Q=je(y.model);u.push(Q?{name:Q,source:"transcript.assistant.message"}:void 0)}return Jt(u)}var V=k(b()),de;function xr(){if(de===void 0)try{de=Ne.userInfo().username}catch{de=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return de}var en="1.10.3",Mr=new Set(["cc.hook","cc.tool_name","cc.tool_use_id","cc.session_id","cc.transcript_path","cc.cwd","cc.permission_mode"]),jr=new Set(["cc.tool_input","cc.tool_response","cc.tool_calls"]),Nr={skipRedactKeys:Mr,bashContextKeys:jr};function Ir(e,t){let n=[];n.push({key:"ingest.type",value:{stringValue:"cc"}}),n.push({key:"cc.hook",value:{stringValue:e.hook_event_name}});let r={};for(let[o,i]of Object.entries(e))o!=="hook_event_name"&&(r[o]=i);return Wt(r,Qt(e,t)),n.push(...(0,V.attrsFromRecord)(r,"cc",Nr)),n}function Cr(e){return[{key:"service.name",value:{stringValue:"claude-code"}},{key:"service.version",value:{stringValue:Xt(e)}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-cc"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:en}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:xr()}},{key:"host.name",value:{stringValue:Ne.hostname()}},{key:"host.arch",value:{stringValue:Ne.arch()}}]}function tn(e){let t=e.now??Date.now();return(0,V.buildPayload)({traceId:e.traceId,spanName:`cc.${(0,V.snakeCase)(e.event.hook_event_name)}`,attributes:Ir(e.event,t),resource:Cr(e.versionCacheDir),scope:{name:"pinta-cc",version:en},now:t})}function U(e,t,n={}){let r=new ue(t),o=n.traceMode==="new"?r.newTrace():r.currentTrace();return tn({event:e,traceId:o,versionCacheDir:t.pluginData})}async function B(e,t){if(!ae())return;let n=new ce(t);await n.flush(),await n.send(e)}function z(e,t){if(!ae())return;let n=Buffer.byteLength(JSON.stringify(e),"utf-8");if(n>Z.MAX_POST_BYTES){process.stderr.write(`[pinta-cc] dropping oversized span payload (${n} > ${Z.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
26
+ `);return}new Z.DiskRetryQueue(t.pluginData,"pinta-cc").enqueue(e)}async function S(e,t,n={}){ae()&&await B(U(e,t,n),t)}async function rn(e,t){let n=U(e,t),r=await F(n,process.env.PINTA_GUARD_ENDPOINT);if(r?.decision==="DENY"){let i={hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:r.userMessage??r.reason??"guard_deny"}};process.stdout.write(JSON.stringify(i)+`
27
+ `)}try{if((0,nn.attachGuard)(n,r),r?.decision==="DENY")return z(n,t),0;await B(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
28
+ `)}return 0}var on=k(b());async function sn(e,t){if(e.hook_event_name==="PostToolUseFailure")return await S(e,t),0;let n=U(e,t),r=await F(n,process.env.PINTA_GUARD_ENDPOINT);r?.decision==="DENY"&&process.stdout.write(JSON.stringify({continue:!1,stopReason:"Pinta blocked this tool output. Start a new session before continuing."})+`
29
+ `);try{if((0,on.attachGuard)(n,r),r&&n.resourceSpans[0].scopeSpans[0].spans[0].attributes.push({key:"pinta.guard.target",value:{stringValue:"tool_output"}}),r?.decision==="DENY")return z(n,t),0;await B(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
30
+ `)}return 0}async function an(e,t){return await S(e,t,{traceMode:"new"}),0}async function cn(e,t){return await S(e,t),0}async function un(e,t){return await S(e,t),0}async function ln(e,t){return await S(e,t),0}var fn=k(b());async function dn(e,t){if(e.hook_event_name==="PermissionDenied")return await S(e,t),0;let n=U(e,t),r=await F(n,process.env.PINTA_GUARD_ENDPOINT);r?.decision==="DENY"&&process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"deny",message:r.userMessage??r.reason??"guard_deny"}}})+`
31
+ `);try{if((0,fn.attachGuard)(n,r),r?.decision==="DENY")return z(n,t),0;await B(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
32
+ `)}return 0}async function Ie(e){return 0}async function Ur(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function pn(){kt();let e=0;try{let t=await Ur(),n=JSON.parse(t);if(Bt(n))return 0;let r=Rt();Lt(n)?e=await Ie(n):Dt(n)?e=await rn(n,r):xt(n)||Mt(n)?e=await sn(n,r):jt(n)?e=await an(n,r):Nt(n)?e=await cn(n,r):It(n)?e=await un(n,r):Ct(n)?e=await ln(n,r):Ut(n)?e=await dn(n,r):e=await Ie(n)}catch(t){process.stderr.write(`[pinta-cc] error: ${t}
33
+ `),e=0}return e}import{opendir as Br,stat as Lr}from"node:fs/promises";import{homedir as $r}from"node:os";import J from"node:path";var Fr="pinta-cc",mn="memory";function qr(){let e=process.env.CLAUDE_CONFIG_DIR;return e&&e.length>0?e:J.join($r(),".claude")}function Gr(){return J.join(qr(),"projects")}function Vr(e,t){return J.relative(e,t).split(J.sep).join("/")}function zr(e){return e.endsWith(".jsonl")?"append-log":"rewritten-doc"}function Yr(e){let t=e.split("/");if(t.length<2)return{};let n=t[0],r=t[1];return t.length===2?r.endsWith(".jsonl")?{projectKey:n,sessionId:r.slice(0,-6)}:{projectKey:n}:r===mn?{projectKey:n}:{projectKey:n,sessionId:r}}function Xr(e){return e.endsWith(".jsonl")?"session-log":e.split("/")[1]===mn?"memory":e.endsWith(".json")?"meta":"other"}async function hn(){return[Gr()]}async function*gn(e,t){let n;try{n=await Br(t)}catch{return}try{for await(let r of n){let o=J.join(t,r.name);r.isDirectory()?yield*gn(e,o):r.isFile()&&(yield{absPath:o,relPath:Vr(e,o)})}}catch{return}}async function*Kr(e){let[t]=await hn(),n=e.since?.getTime();for await(let{absPath:r,relPath:o}of gn(t,t)){let i;try{i=await Lr(r)}catch{continue}if(n!==void 0&&i.mtime.getTime()<=n)continue;let{projectKey:s,sessionId:a}=Yr(o);yield{relPath:o,absPath:r,size:i.size,mtime:i.mtime,sessionId:a,projectKey:s,semantics:zr(o)}}}var Wr={id:Fr,roots:hn,scan:Kr,classify:Xr};Ot();function Jr(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===Zr(Hr(e)).href}catch{return!1}}async function Qr(){let e=await pn();process.exit(e)}Jr()&&Qr();export{Wr as lifecycle};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pinta-ai/pinta-cc",
3
- "version": "1.10.3-skax.0",
3
+ "version": "1.10.3",
4
4
  "description": "Generic OTLP forwarder for Claude Code hook events",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -43,7 +43,7 @@
43
43
  "prepublishOnly": "npm run build"
44
44
  },
45
45
  "devDependencies": {
46
- "@pinta-ai/core": "0.9.3-skax.0",
46
+ "@pinta-ai/core": "^0.9.2",
47
47
  "@types/node": "^22.0.0",
48
48
  "esbuild": "^0.24.0",
49
49
  "tsx": "^4.0.0",